专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
关于RTX的若干疑问。
2019-12-27 19:01
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
4316
13
13
1,rt_ret_val 这个函数直接修改目标任务的堆栈的R0,但是任务又不会出栈,所以不是很清楚这个函数的作用。
2,rt_dispatch 这个函数将新任务加入就绪链表,可是,仅通过 rt_switch_req 简单赋值指针就能执行调度?这个时候不是应该立即进行调度么,如果在systick时根据就绪链表进行调度那岂不是实时性就很差了?
3,待定
谢谢大家捧场,希望能够得到大家的指点。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
macaroni
2019-12-29 05:43
本帖最后由 macaroni 于 2015-8-24 13:49 编辑
已解决
_declare_box8 (mp_stk, OS_STKSIZE*4, OS_TASK_CNT-OS_PRIV_CNT+1); // 通用STACK
#define _declare_box8(pool,size,cnt) U64 pool[(((size)+7)/8)*(cnt) + 2]
uint64_t os_stack_mem[2+OS_PRIV_CNT+(OS_STACK_SZ/8)]; // 私有STACK
#define OS_STACK_SZ (4*(OS_PRIVSTKSIZE+OS_MAINSTKSIZE+OS_TIMERSTKSZ))
复制代码
如上,RTX定义了两组STACK,一组是“通用”STACK,一组是私有“STACK”。这个私有STACK是不是有BUG???
如果按照我的理解 应该这样定义:
uint64_t os_stack_mem[2+(OS_STACK_SZ/8)];
#define OS_STACK_SZ (4*(OS_PRIVSTKSIZE * OS_PRIV_CNT +OS_MAINSTKSIZE+OS_TIMERSTKSZ))
复制代码
其中OS_MAINSTKSIZE应该是给main线程,OS_TIMERSTKSZ应该是给定时器线程,这两个应该使用的是“私有”STACK。
还是说RTX有什么黑科技?
OS_PRIVSTKSIZE 并不是定义的每个“私有”STACK的堆栈数目,而是所有“私有”STACK的堆栈数目。
// <o>Total stack size [bytes] for threads with user-provided stack size <0-1048576:8><#/4>
// <i> Defines the combined stack size for threads with user-provided stack size.
// <i> Default: 0
#ifndef OS_PRIVSTKSIZE
#define OS_PRIVSTKSIZE 0 // this stack size value is in words
#endif
复制代码
加载中...
查看其它13个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
已解决
- _declare_box8 (mp_stk, OS_STKSIZE*4, OS_TASK_CNT-OS_PRIV_CNT+1); // 通用STACK
- #define _declare_box8(pool,size,cnt) U64 pool[(((size)+7)/8)*(cnt) + 2]
- uint64_t os_stack_mem[2+OS_PRIV_CNT+(OS_STACK_SZ/8)]; // 私有STACK
- #define OS_STACK_SZ (4*(OS_PRIVSTKSIZE+OS_MAINSTKSIZE+OS_TIMERSTKSZ))
复制代码如上,RTX定义了两组STACK,一组是“通用”STACK,一组是私有“STACK”。这个私有STACK是不是有BUG???
如果按照我的理解 应该这样定义:
- uint64_t os_stack_mem[2+(OS_STACK_SZ/8)];
- #define OS_STACK_SZ (4*(OS_PRIVSTKSIZE * OS_PRIV_CNT +OS_MAINSTKSIZE+OS_TIMERSTKSZ))
复制代码其中OS_MAINSTKSIZE应该是给main线程,OS_TIMERSTKSZ应该是给定时器线程,这两个应该使用的是“私有”STACK。
还是说RTX有什么黑科技?
OS_PRIVSTKSIZE 并不是定义的每个“私有”STACK的堆栈数目,而是所有“私有”STACK的堆栈数目。
- // <o>Total stack size [bytes] for threads with user-provided stack size <0-1048576:8><#/4>
- // <i> Defines the combined stack size for threads with user-provided stack size.
- // <i> Default: 0
- #ifndef OS_PRIVSTKSIZE
- #define OS_PRIVSTKSIZE 0 // this stack size value is in words
- #endif
复制代码一周热门 更多>