μC/OS-II的时间管理
RdyGrp|=ptcb->TCBBitY;(6)
OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;
OS_EXIT_CRITICAL();
OSSched();(7)
}else{
OS_EXIT_CRITICAL();
}
return(OS_NO_ERR);
}else{
OS_EXIT_CRITICAL();
return(OS_TIME_NOT_DLY);
}
}else{
OS_EXIT_CRITICAL();
return(OS_TASK_NOT_EXIST);
}
}
注意,用户的任务有可能是通过暂时等待信号量、邮箱或消息队列来延时自己的(参看第六章)。可以简单地通过控制信号量、邮箱或消息队列来恢复这样的任务。这种情况存在的唯一问题是它要求用户分配事件控制块(参看6.00),因此用户的应用程序会多占用一些RAM。
5.3系统时间,OSTimeGet()和 OSTimeSet()
无论时钟节拍何时发生,μC/OS-Ⅱ都会将一个32位的计数器加1。这个计数器在用户调用OSStart()初始化多任务和4,294,967,295个节拍执行完一遍的时候从0开始计数。在时钟节拍的频率等于100Hz的时候,这个32位的计数器每隔497天就重新开始计数。用户可以通过调用OSTimeGet()来获得该计数器的当前值。也可以通过调用OSTimeSet()来改变该计数器的值。OSTimeGet()和OSTimeSet()两个函数的代码如程序清单L5.4所示。注意,
在访问OSTime的时候中断是关掉的。这是因为在大多数8位处理器上增加和拷贝一个32位的数都需要数条指令,这些指令一般都需要一次执行完毕,而不能被中断等因素打断。
程序清单 L5.4 得到和改变系统时间
INT32UOSTimeGet(void)
{
INT32Uticks;
OS_ENTER_CRITICAL();
ticks=OSTime;
OS_EXIT_CRITICAL();
return(ticks);
}
voidOSTimeSet(INT32Uticks)
{
OS_ENTER_CRITICAL();
OSTime=ticks;
OS_EXIT_CRITICAL();
}
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
