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; //就绪表
}
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 */
现在来观察一下,空闲任务的堆栈和任务控制块的的变化
入栈内容包括:任务参数,函数指针,栈底应该是不存放数据的,最后返回当前的栈顶指针
任务控制块的初始化:从空闲链表中获取一个可用的任务控制块,将空闲任务链表指针指向下一个控制块,初始化任务控制块,并更新任务优先级指针表,将任务控制块添加到就绪链表中,更新任务就绪链表指针,就绪表,就绪组,任务统计数
// 初始化系统钩子函数:不懂
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 */
现在来观察一下,空闲任务的堆栈和任务控制块的的变化
入栈内容包括:任务参数,函数指针,栈底应该是不存放数据的,最后返回当前的栈顶指针
任务控制块的初始化:从空闲链表中获取一个可用的任务控制块,将空闲任务链表指针指向下一个控制块,初始化任务控制块,并更新任务优先级指针表,将任务控制块添加到就绪链表中,更新任务就绪链表指针,就绪表,就绪组,任务统计数
相关文章推荐
- 2015年度个人总结和计划
- vc 使用了SerialPort类的串口通信软件分析
- 太上感应篇0008
- Thead 生产消费
- struts2中的constant详解
- 实现文件下载
- C++中的内存对齐
- 从扎克伯格捐450亿看程序员前景
- 随机取出数组中的某些值,并删除它们array_splice,array_slice
- 可读性设计规范
- Delphi中的内存对齐 与 Packed关键字
- 节日
- 【mysql】关于innodb_file_format
- 太上感应篇0007
- springMVC返回数据的乱码问题
- project 计算器
- win32api显示BMP图片的最简单方案
- MySQL用户权限管理详解
- leetcode笔记:Subsets II
- php与Microsoft SQL Server