ucos代码阅读(2)

void  OSInit (void)
{
    OSInitHookBegin();                                           /* Call port specific initialization code   */


    OS_InitMisc();                                               /* Initialize miscellaneous variables       */


    OS_InitRdyList();                                            /* Initialize the Ready List                */


    OS_InitTCBList();                                            /* Initialize the free list of OS_TCBs      */


    OS_InitEventList();                                          /* Initialize the free list of OS_EVENTs    */


#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
    OS_FlagInit();                                               /* Initialize the event flag structures     */
#endif


#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
    OS_MemInit();                                                /* Initialize the memory manager            */
#endif


#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
    OS_QInit();                                                  /* Initialize the message queue structures  */
#endif


    OS_InitTaskIdle();                                           /* Create the Idle Task                     */
#if OS_TASK_STAT_EN > 0
    OS_InitTaskStat();                                           /* Create the Statistic Task                */
#endif


#if OS_TMR_EN > 0
    OSTmr_Init();                                                /* Initialize the Timer Manager             */
#endif


    OSInitHookEnd();                                             /* Call port specific init. code            */


#if OS_DEBUG_EN > 0
    OSDebugInit();
#endif
}


只有红色的部分是默认的部分,而其他部分需要使用宏定义开启,这是否意味着软件上的最小系统也就是这样的呢

这六行代码中有另个hook函数这两个函数需要用户自己实现,当然也可以不实现

OS_InitRdyList();                                            /* Initialize the Ready List                */


    OS_InitTCBList();                                            /* Initialize the free list of OS_TCBs      */


    OS_InitEventList();                                          /* Initialize the free list of OS_EVENTs    */

这三个函数是关键的函数

OS_InitRdyList();   

static  void  OS_InitRdyList (void)
{
    INT8U    i;
#if OS_LOWEST_PRIO <= 63
    INT8U   *prdytbl;
#else
    INT16U  *prdytbl;
#endif

    OSRdyGrp      = 0;                                     /* Clear the ready list                     */
    prdytbl       = &OSRdyTbl[0];
    for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
        *prdytbl++ = 0;
    }


    OSPrioCur     = 0;
    OSPrioHighRdy = 0;


    OSTCBHighRdy  = (OS_TCB *)0;
    OSTCBCur      = (OS_TCB *)0;
}

 OSRdyGrp (GLOBAL) 

OS_EXT  INT8U             OSRdyGrp;                        /* Ready list group                         */ 在ucos_ii.h中

清空OSRdyTbl[](GLOBAL)

并且对一下的全局变量赋值

OSPrioCur     = 0;                                           当前任务优先级
OSPrioHighRdy = 0;                                         当前就绪的任务的最高优先级
OSTCBHighRdy  = (OS_TCB *)0;                 当前就绪的最高优先级的任务的TCB

OSTCBCur      = (OS_TCB *)0;                     当前任务的TCB




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值