1.任务是一个无返回的无穷循环。uc/os-ii总是运行进入就绪状态的最高优先级的任务。
2. 任务是如何调度(切换)的?
因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。所以,确定哪个任务优先级最高,下面该哪个任务运行,这个工作就是由调度器(scheduler)来完成的。
任务级的调度是由函数OSSched()完成的,而中断级的调度是由函数 OSIntExt()完成。对于OSSched(),它内部调用的是 OS_TASK_SW()完成实际的调度(人为模仿一次中断);OSIntExt()内部调用的是OSCtxSw()实现调度。参考:P92,P106
任务切换其实很简单,由如下2步完成:(1)将被挂起任务的处理器寄存器推入自己的任务堆栈。(2)然后将进入就绪状态的最高