一步一步教你使用uCOS-II( 二 )


(void(*task)(void*pd),void*pdata,*ptos,INTU prio)
Task:是指向任务代码的指针,pdata:是任务开始执行是,传递给任务的参数的指针,ptos:是分配给任务的堆栈的栈顶指针,prio是分配给任务的优先级 。
也可以用(),不过该函数需要9个参数,前四个参数与()一样,例如:
INT8U (void(*task)(void *pd),void *pdata, *ptos, INT8U prio,id, *pbos, *pbos, *pbos, )
id参数为要建立的任务创建一个特殊的标识符 。pbos是指向任务的堆栈栈底的指针,用于堆栈的检验 。用于指定堆栈成员数目的容量 。pext是指向用户附加的数据域的指针,用来扩展任务的 。opt用于设定()的选项,指定是否允许堆栈检验,是否将堆栈清零,任务是否要进行浮点操作等等 。
2:任务堆栈()
每个任务都有自己的堆栈,堆栈必须申明为类型,并且由连续的内存空间组成 。可以静态分配堆栈空间,也可以动态分配堆栈空间 。
3:堆栈检验()
有时确定任务实际需要的堆栈空间的大小是很有必要的,因为这样就可以避免为任务分配过多的堆栈空间,从而减少应用程序代码所需的RAM空间 。
4:删除任务()
有时需要删除任务,删除任务,是说任务返回并处于休眠态,并不是说任务的代码被删除了,只是任务的代码不再被UCOS调用 。删除任务前应保证所删任务并非空闲任务 。
5:请求删除任务()
有时,任务会占用一些内存缓冲或信号量一类的资源 。这时,假如另一个任务试图删除该任务,这些被占用的资源就会因为没有被释放而丢失 。在这种情况下,需想办法拥有这些资源的任务在使用完资源后先释放资源,再删除自己 。
6:改变任务的优先级()
在建立任务时,会分配给任务一个优先级 。在程序运行期间,可以通过调用该函数改变任务的优先级 。也就是说,UCOS允许动态的改变任务的优先级 。
7:挂起任务()
任务挂起是一个附加功能,也就是说,如果任务在被挂起的同时也在等待延迟时间到,那么,需要对任务做取消挂起的操作,并且等待延迟时间到,任务才能转让就绪状态 。任务可以挂起自己或者其他任务 。
8:恢复任务()
挂起的任务只有通过该函数才能被恢复 。
9:获得任务的信息()
通过调用该函数,来获得自身或其他应用任务的信息
时间管理
uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次(这个时间片段是OS的作者推荐的,大家可以参考邵贝贝翻译的《嵌入式实时操作系统ucos-II》这本书),时间频率取决于用户对硬件系统的定时器编程来实现 。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍 。这里隐含的意思就是你选择的芯片如果想使用UCOS系统,前提条件一定要有一个Timer 。
uC/OS-II要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数 。
uCOS时间管理的相关函数
1:任务延迟函数()
Ucos提供一个可以被任务调用而将任务延时一段特定时间的功能函数,即().任务调用()后,一旦规定的时间期满或者有其他的任务通过调用()取消了延时,他就会进入就绪状态 。只有当该任务在所有就绪态任务中具有最高的优先级,它才会立即运行 。
2:按时,分,秒延时函数()
与()一样,调用()函数也会是UCOS进行一次任务调度,并且执行下一个优先级最高的就绪任务 。当()后,一旦规定的时间期满,或者有(),它就会马上处于就绪态 。同样,只有当该任务在所有就绪态任务中具有最高的优先级,他才开始运行 。