1.任务级调度器:OSSched(),不能用于中断服务函数中
函数里有一个函数OS_TASK_SW(),这个是真正执行任务切换的宏,它把当前任务的CPU寄存器值保存在任务堆栈中,保存完当前任务的现场后将新任务的OS_TCB中保存的任务堆栈指针的值加载到CPU的堆栈指针寄存器中,新任务结束后还要把CPU寄存器值变回旧任务的。
2.中断级调度器:OSIntEnter(),OSIntExit(),调用此函数时中断应该是关闭的
函数里有一个函数OSIntCtxSW(),这个是真正执行任务切换的宏,进入中断时硬件自动保存现场了,将新任务的OS_TCB中保存的任务堆栈指针的值加载到CPU的堆栈指针寄存器中,新中断结束后自动恢复现场。
3.时间片轮转调度:UCOSIII支持一个优先级下有多个任务,不过允许一个任务运行一段时间(时间片)后让出CPU使用权,让同优先级下的洗一个任务运行,这种任务调度方法就是时间片轮转调度。如果同级下第一个任务设置的时间片用完则第一个任务排到链表尾,等待下一次调度。使用OSSchedRoundRobinYield()可以放弃剩余的时间片,在同级下其它任务运行。
通常创建多个任务,可以先在main函数中设置一个任务,然后在这个任务里创建多个任务.
每个任务都有自己的任务函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)