Erika2看上去都没有指针,果然符合Misra,那么都是用固定的数组,怎么实现其它RTOS用链表方法按优先级将task插入到就绪列表的呢?
我今天从StartOS开始看code,Activetask中有调用EE_rq_insert函数,就是用来将任务插入到就绪列表。我选择ECC1配置来分析代码,这样比较简单,因为同一个优先级只允许一个task。
就绪队列插入的关键代码设计如下
#if defined(__OO_BCC1__) || defined(__OO_ECC1__)
/* this function inserts a task into the ready queue */
void EE_rq_insert(EE_TID t)
{
EE_TYPEPRIO prio;
EE_TID p,q;
p = EE_NIL;
q = EE_rq_first;
prio = EE_th_ready_prio[t];
while ((q != EE_NIL) && (prio <= EE_th_ready_prio[q])) {
p = q;
q = EE_th_next[q];
}
if (p != EE_NIL) {
EE_th_next[p] = t;
} else {
EE_rq_first = t;
}
EE_th_next[t] = q;
}
#endif
网友评论