1ucos的初始化 在使用ucos的所有服务之前,必须调用ucos的初始化函数OSInit(),对ucos自身的运行环境初始化。
函数OSInit()将对ucos的所有全局变量和数据结构进行初始化,同时创建空闲任务OSTaskIdle,并赋以之最低的优先级别和永远的就绪状态。注:空闲任务在这里创建。如果用户应用程序还要使用统计任务(OS_TASK_STAT_EN == 1),则OSInit()还要以优先级别为OS_LOWEST_PRIO - 1来创建统计任务。
初始化函数OSIint()对数据结构进行初始化时,主要包括创建空任务控制块链表在内的5个空数据缓冲区。同时,为了可以快速地查询任务控制块的各个元素,初始化函数OSInit()还要创建一个数组OSTCBPrioTbl[OS_LOWEST_PRIO +1].在这个数组中,按任务的优先级别的顺序把任务控制块的指针存放在了相对应的元素中。
初始化后,各全局变量如图
2ucos的启动
ucos进行任务的管理是从调用启动函数OSStart()开始,当然,前提条件是在调用该函数之前至少创建了一个任务
主函数main()在调用了函数OSStrat()之后,ucos就立即进入了多任务管理阶段。
如果在main中建立了一个优先级为6的任务后,
这时
OSStartHighRdy()在多任务系统启动函数OSStart()中调用。完成的功能是:设置系统运行标志位OSRunning = TRUE,将就绪表中最高优先级任务的栈指针Load到SP中,并强制中断返回。这样就绪的最高优先级任务就如同从中断里返回到运行态一样,使得系统得以运转
|