3.2 μC/OS-Ⅱ的时钟à周期性信号
用硬件定时器产生一个周期为毫秒级的周期性中断来实现系统时钟。产生的中断的中断服务程序为OSTickISR()(汇编语言),通过调用时钟节拍服务函数OSTimeTick()来完成系统在每个时钟节拍需要的工作。
最小的时钟单位是两次中断之间相间隔的时间,称之为时钟节拍。
调用时钟节拍服务函数OSTimeTick()做了两件事:给计数器OSTime加1;遍历任务控制块链表中的所有任务控制块,把各个控制块中用来存放任务延时时限的OSTCBDly变量减1,并使该项为0,不使被挂起的任务进入就绪状态。(即在每个时钟节拍了解每个任务的延时状态,使已经到了延时时限的非挂起任务进入就绪状态)
3.3 时间管理
3.3.1 任务的延时
μC/OS-Ⅱ是一个抢占式内核。
规定:除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly(),使当前任务的运行延时一段时间并进行一次任务调用,以让出CPU使用权。
OSTimeDly()函数参数是以时钟节拍数为单位的延时时间。
延时函数OSTimeDlyHMSM(INT8U hours, INT8Uminutes, INT8U seconds, INY16U milli);
调用了函数OSTimeDly()和OSTimeDlyHMSM()的任务,当规定的延时时间期满,或有其他任务通过调用函数OSTimeDlyResume()取消了延时时,它立即会进入就绪状态。
3.3.2 取消任务的延时
OSTimeDlyResume()函数取消延时而进入就绪状态
OSTimeDlyResume(INT8Uprio);
3.3.3 获取和设置系统时间
OSTime记录系统发生的时钟节拍数。
在应用程序调用OSStart()时被初始化为0,每发生1各时钟节拍OSTime就加1.
INT32U OSTimeGet(void);获取OSTime的值
void OSTimeSet(INT32U ticks);设置OSTime的值