美文网首页RTOS和GUI_基于英飞凌tc2x及stm32开发板
数组代替链表插入OS就绪队列的设计--Apple的学习笔记

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

作者: applecai | 来源:发表于2020-04-14 21:24 被阅读0次

    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的学习笔记

        本文链接:https://www.haomeiwen.com/subject/cgmxvhtx.html