关于RTX的若干疑问。

2019-12-27 19:01发布



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 编辑

已解决



  1. _declare_box8 (mp_stk, OS_STKSIZE*4, OS_TASK_CNT-OS_PRIV_CNT+1);          // 通用STACK

  2. #define _declare_box8(pool,size,cnt)  U64 pool[(((size)+7)/8)*(cnt) + 2]

  3. uint64_t       os_stack_mem[2+OS_PRIV_CNT+(OS_STACK_SZ/8)];                        // 私有STACK

  4. #define OS_STACK_SZ (4*(OS_PRIVSTKSIZE+OS_MAINSTKSIZE+OS_TIMERSTKSZ))

复制代码

如上,RTX定义了两组STACK,一组是“通用”STACK,一组是私有“STACK”。这个私有STACK是不是有BUG???

如果按照我的理解 应该这样定义:

  1. uint64_t       os_stack_mem[2+(OS_STACK_SZ/8)];       

  2. #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的堆栈数目。


  1. //   <o>Total stack size [bytes] for threads with user-provided stack size <0-1048576:8><#/4>
  2. //   <i> Defines the combined stack size for threads with user-provided stack size.
  3. //   <i> Default: 0
  4. #ifndef OS_PRIVSTKSIZE
  5. #define OS_PRIVSTKSIZE 0       // this stack size value is in words
  6. #endif
复制代码

一周热门 更多>