这里要注意下,根据uCOS-II官方说明文档,操作系统节拍时钟一定要在OSStart()函数调用之后进行初始化,通常来讲在操作系统运行的第一个任务中进行,否则可能导致系统崩溃。
因为OSStart()函数中需要执行OSStartHighRdy(),而该函数执行后将直接跳转到优先级最高的任务中运行,至此uCOS-II算是正式运行了,因为它第一次执行了任务调度,此时再初始化系统节拍时钟,实现uCOS-II在中断中调度任务。
中断中实现任务调度,是uCOS-II高实时性特色的根源,当OSIntExit()函数内检索到有更高优先级的任务准备完毕时,会调用OSIntCtxSw(),而该函数需要根据不同的芯片架构进行相关移植代码的编写,而对于LPC17xx系列,通用做法是在OSIntCtxSw()函数中进行PendSV请求,这样在系统节拍定时中断退出时会执行PendSV的中断处理,在该处理中真正实现任务的调度。