1. 在ucos II 中常用 OSTimeDlyHMSM()函数经常会阻塞本任务。
2. 当对程序要求比较高时,可以用:
while((OSTimeGet() > 1000) //延时一秒函数
{ OSTimeSet(0); }
OSTimeGet()函数为系统时间函数,它不会阻塞本任务。
3. 利用OSTimeGet()函数定时20s
u32 t;;//定义全局变量
while(OSTimeGet() - t > 20*1000 ) //定时20s
{
t = OSTimeGet();
函数体
}
4.OSTimeGet()函数原型
/*
*********************************************************************************************************
* GET CURRENT SYSTEM TIME
*
* Description: This function is used by your application to obtain the current value of the 32-bit
* counter which keeps track of the number of clock ticks.
*
* Arguments : none
*
* Returns : The current value of OSTime
*********************************************************************************************************
*/
#if OS_TIME_GET_SET_EN > 0
INT32U OSTimeGet (void)
{
INT32U ticks;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
ticks = OSTime;
OS_EXIT_CRITICAL();
return (ticks);
}
#endif
5说明
获取当前时间
描述:获得32位跟踪时钟节拍数的计数器,获得当前值
参数:无
返回:OStime的当前值
备注:在访问OStime的时候,中断是关的,因为大多数八位处理器上增加或者拷贝
一定32位数,要数条指令,中途不能被打断
在μCOS-II系统中,无论时钟节拍何时发生,μC/OS-Ⅱ都会将一个32位的计数器加1,这个计数器在用户调用OSStart()初始化多任务和4,294,967,295个节拍执行完一遍的时候从0开始计数。
用户可以通过调用OSTimeGet()来获得该计数器的当前值,OSTimeGet()的详细信息见下表。
上图说明了如何通过OSTimeGet()函数得到当前的系统时钟节拍:ticks = OSTimeGet();来实现。