1、UCOSII的定时中断
(1)绝大多数的内核要求提供定时中断,以实现延时与超时控制等功能。这个定时中断叫做时钟节拍。
(2)时钟的中断子程序ISR和时钟节拍函数OSTimeTick()
该函数用于通知UCOSII
,发生了时钟的节拍中断。
2、UCOSII的5个关键的时钟函数
(1)OSTimeDly();
后面的4个函数可以根据需要进行配置使用
(2)OSTimeHMSM();
(3)OSTimeDlyResume();
(4)OSTimeGet();
(5)OSTimeSet();
3、关键的时钟延时函数的实现OSTimeDly()
(1)参数分析:
ticks:代表的是多少个时钟周期节拍
(2)实现过程:
把相应任务的就绪表中的位图的位置清零。
把需要执行的等待节拍进行处理。
最后进行任务调度,寻找下一个这个时刻最高优先级的任务。
(3)发出疑问?为什么我在OS_TCB的结构体当中的Ticks填写相应的数字的时候可以
实现把任务从就绪态变为等待的状态?
答案:OSTimeTick()这个函数
void OSTimeDly (INT32U ticks)
{
INT8U y;
#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0u;
#endif
if (OSIntNesting > 0u) {
/* See if trying to call from an ISR */
return;
}
if (OSLockNesting > 0u) {
/* See if called with scheduler locked */
return;
}
if (ticks > 0u) {
/* 0 means no delay! */
OS_ENTER_CRITICAL