您的位置:首页 > 其它

ucosii系统初始化函数

2015-12-29 23:51 190 查看
OSInitHookBegin(); /* Call port specific initialization code */

// 初始化系统钩子函数:不懂

OS_InitMisc(); /* Initialize miscellaneous variables */

//初始化一些重要的全局变量

1. OSTime = 0uL; //系统时钟

2. OSIntNesting = 0u; //中断嵌套层数

3. OSLockNesting = 0u; //调度锁计数

4. OSTaskCtr = 0u; //任务计数

5. OSRunning = OS_FALSE; //多任务,没有开始

6. OSCtxSwCtr = 0u; //任务调度计数

7. OSIdleCtr = 0uL; //空闲计数

8. OSIdleCtrRun = 0uL; //1s内的空闲计数

OSIdleCtrMax = 0uL; //最大的空闲计数值

OSStatRdy = OS_FALSE; //统计任务未开始

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

//初始化就绪组和就绪表

OSRdyGrp = 0u; //任务就绪组

for (i = 0u; i < OS_RDY_TBL_SIZE; i++) {

OSRdyTbl[i] = 0u; //就绪表

}

OSPrioCur     = 0u;             //当前任务优先级
OSPrioHighRdy = 0u;        //当前就绪任务的最高优先级

OSTCBHighRdy  = (OS_TCB *)0;  //当前就绪最高优先级任                        务控制块指针
OSTCBCur      = (OS_TCB *)0;   //当前任务控制块指针


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

//任务控制块初始化:比较重要

OS_MemClr((INT8U *)&OSTCBTbl[0], sizeof(OSTCBTbl));

OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl)); //任务控制块表和任务优先级表清零

for (ix = 0u; ix < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1u); ix++) {

ix_next = ix + 1u;

ptcb1 = &OSTCBTbl[ix];

ptcb2 = &OSTCBTbl[ix_next]; //任务控制块链接成单向链表,其实就是空闲链表

ptcb1->OSTCBNext = ptcb2;

OSTCBList = (OS_TCB *)0;

OSTCBFreeList = &OSTCBTbl[0];

//空闲链表和就绪链表

//两清一连两链

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

。。。。。。。。。。。。。 //事件标志,内存,队列初始化

OS_InitTaskIdle(); /* Create the Idle Task */

//重点:空闲任务初始化

OSTaskCreateExt(OS_TaskIdle,

(void )0, / No arguments passed to OS_TaskIdle() */

&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1u],/* Set Top-Of-Stack */

OS_TASK_IDLE_PRIO, /* Lowest priority level */

OS_TASK_IDLE_ID,

&OSTaskIdleStk[0], /* Set Bottom-Of-Stack */

OS_TASK_IDLE_STK_SIZE,

(void )0, / No TCB extension */

OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)

OS_TaskIdle:空闲任务函数指针,空闲任务其实就是在计数????,怎么没有延时来释放cpu

传递给任务的参数

空闲任务栈顶指针:空闲任务有专门的栈

优先级和ID

栈底指针

/* Enable stack checking + clear stack */

现在来观察一下,空闲任务的堆栈和任务控制块的的变化

入栈内容包括:任务参数,函数指针,栈底应该是不存放数据的,最后返回当前的栈顶指针

任务控制块的初始化:从空闲链表中获取一个可用的任务控制块,将空闲任务链表指针指向下一个控制块,初始化任务控制块,并更新任务优先级指针表,将任务控制块添加到就绪链表中,更新任务就绪链表指针,就绪表,就绪组,任务统计数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: