uc/os中OSTimeDly与OSTimeDlyHMSM的区别
在uc/os-II的系统中,规定,除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly();使当前任务的运行延时(暂停)一段时间并进行一次任务调度,以让出CPU的使用权。(嵌入式实时操作系统uc/os-II原理及应用(任哲))
OSTimeDly()源码:
void OSTimeDly(INT16U ticks) //以时钟节拍数为单位的延时函数
{
#if OS_CRITICAL_METHOD == 3 //控制中断选择
OS_CPU_SR cpu_sr;
#endif
if(ticks > 0)
{
OS_ENTER_CRITICAL();
if((OSRdyTbl[OSTCBCur -> OSTCBY] &= ~OSTCBCur -> OSTCBBitX) == 0)
{
OSRdyGrp &= ~OSTCBCur -> OSTCBBitY;
}
OSTCBCur -> OSTCBDly = ticks;
OS_EXIT_CRITICAL();
OS_Sched();
}
}
OSTimeDlyHMSM()主要源码:
ticks = (hours * 3600L + minutes * 60L + seconds) * OS_TICKS_PER_SEC
+ OS_TICKS_PER_SEC * (milli + 500L / OS_TICKS_PER_SEC) / 1000L;
loops = ticks / 65536L; //计算得商得倍数(多少