|
楼主 |
发表于 2015-8-24 13:46:34
|
显示全部楼层
本帖最后由 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
复制代码 |
|