数组代替链表插入OS就绪队列的设计--Apple的学习笔记

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

关键代码理解绘图分析

就绪队列插入分析.png

代码分析文字描述

文字描述.png

你可能感兴趣的:(数组代替链表插入OS就绪队列的设计--Apple的学习笔记)