函数大致用途
OS_TASK.C是uC/OS-II有关任务管理的文件,它定义了一些函数:建立任务、删除任务、改变任务的优先级、挂起和恢复任务,以及获取有关任务的信息。
函数 | 用途 |
---|---|
OSTaskCreate() | 建立任务 |
OSTaskCreateExt() | 扩展建立任务 |
OSTaskStkChk() | 堆栈检验 |
OSTaskDel() | 删除任务 |
OSTaskDelReq() | 请求删除任务 |
OSTaskChangePrio() | 改变任务的优先级 |
OSTaskSuspend() | 挂起任务 |
OSTaskResume() | 恢复任务 |
OSTaskQuery() | 获取有关任务的信息 |
状态切换图
OSTaskCreate() and OSTaskCreateExt()
建立任务函数,一旦任务建立就进入就绪态准备运行。
任务可以在多任务开始之前建立,也可以是动态地被一个运行着的任务建立。
如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,这时,这个刚刚建立的任务将立即得到CPU控制权。
OSTaskDel()
将任务转入睡眠态。
它可以由本任务执行,也可以由另一个任务调用该函数使本任务进入睡眠态
OSTaskSuspend() and OSTaskResume()
挂起任务和恢复任务:将任务转入挂起态、将任务从挂起态转入就绪态。
一些延迟函数和事件函数也可以完成任务到挂起状态的转换。
OSTaskChangePrio()
改变任务的优先级。
它本身不改变任务状态,但是可能会影响任务的状态。
例:执行任务将就绪任务的优先级改的比自己高,这样cpu的控制权就会立刻被转到那个任务手中
OSTaskStkChk()
为了避免为任务分配过多的堆栈空间,从而减少自己的应用程序的代码所需内存数量。这时就需要获取任务实际所需的堆栈空间大小。
本函数的操作:顺着堆栈的栈底开始计算空闲的堆栈空间大小,具体实现方法是统计存储值为0的连续堆栈入口的数目,直到发现存储值不为0的堆栈入口
OSTaskQuery()
该函数通过检查对应任务的任务控制块中的内容来得到任务的信息。
可以获取自身或其他应用任务的信息。
OSTaskIdle()
当所有任务都不在就绪态中,操作系统将执行空闲任务的函数OSTaskIdle()。
这个函数由系统定义,不能删除、挂起或者改变优先级。
有关中断
如果中断没有被禁止,正在运行的任务是可以被中断的。任务被中断后,进入中断服务态(ISR).响应中断时,正在执行的任务处于挂起态,中断服务子程序控制了系统的控制权。
中断服务程序完成后,不一定返回到被中断的任务。
因为uC/OS-II总是执行就绪态任务中优先级最高的任务。由于中断服务程序的执行,可能使被中断的程序不是就绪态任务中优先级最高的。
例如下面几个情况:
1、中断服务程序利用了时间的发生,而使得一个或读个更高优先级任务进入就绪态
2、中断服务程序建立或者恢复了一个新的高优先级任务
3、中断程序挂起了被中断的任务。
一般来说中断服务程序不会干涉任务的调度,所以后两种情况不会经常发生。第一种情况比较常见