您的位置:首页 > 其它

ucOSII 学习之初识实时操作系统-时间管理

2014-08-23 15:15 197 查看
ucosII需要提供定时中断,以实现禅师和延时控制功能。这个定时中断叫做时钟节拍。时钟节拍的频率越高,系统的负荷越重。

OSTimeTick()用于通知ucosII发生了时钟节拍中断。

OSTimeDly()

OSTimeDlyHMSM()

OSTimeDlyResume()

OSTimeGet()

OSTimeSet()

这些函数可以再OS_TIME.c文件中找到。必须通过OS_CFG.h中的一些常量,才能使一些时间管理函数呗允许使用。

1 OSTimeDly()

将任务延时一段特定时间的功能函数。时间长短有指定的时钟节拍的数目决定。调用该函数会使系统进行一次任务调度,从而去执行下一个优先级最高的任务就绪。调用延时函数后一旦规定的时间期满或有其他的任务通过调用OSTimeDlyResume()取消了延时,他就会立即进入就绪状态。

时钟节拍数 1--65536.指定0值不进行任何延时。

//1.OSTimeDly()函数

void OSTimeDly(INT16U ticks)

{

INT8U y;

#if OS_CRITICAL_METHOD
== 3

OS_CPU_SR cpu_sr =0;

#endif

if(OSIntNesting
> 0)
{

return;//在中断处理函数中调用了OSTimeDly(),那么直接退出

}

if(ticks
> 0)
{

OS_ENTER_CRITICAL();

//调用OSTimeDly()的进程自己把自己从就绪控制矩阵中拿下来,

//即:去掉调度器(x,y)矩形阵列(OSRdyTbl,OSRdyGrp)中该task对应的bit位,使得调度器不考虑

//该task的调度

y = OSTCBCur->OSTCBY;

OSRdyTbl[y]
&=
~OSTCBCur->OSTCBBitX;

if(OSRdyTbl[y]
== 0)
{

OSRdyGrp
&= ~OSTCBCur->OSTCBBitY;

}

//延时ticks值,放入OSTCBDly单元,在os时钟滴答处理函数OSTimeTick()中,会处理该单元[gliethttp]

OSTCBCur->OSTCBDly
= ticks;

OS_EXIT_CRITICAL();

//因为本task正在运行,所以本task现在的优先级最高,现在本task已经将自己从就绪控制矩阵中--调度器(x,y)矩形阵列

//把自己摘掉,所以调度函数OS_Sched()一定会切换到另一个task中执行新task的代码[gliethttp]

OS_Sched();//具体参见《浅析μC/OS-II v2.85内核调度函数》

}//ticks==0,那么什么也不做

}

想延时一个时钟节拍,而实际上只在0--1个节拍之间结束延时。所以如果程序想延时至少一个节拍,必须指定延时2个节拍。

2 OSTimeDlyHMSM()按时分秒延时函数

由于OSTimeDlyHMSM()的具体实现方法,用户不能结束延时调用OSTimeDlyHMSM()要求延时超过65535个节拍的任务。换句话说,如果时钟节拍的频率是100Hz,用户不能让调用OSTimeDlyHMSM(0,10,55,350)或更长延迟时间的任务结束延时。

3恢复延时的任务 OSTimeDlyResume()

μC/OS-Ⅱ允许用户结束延时正处于延时期的任务。延时的任务可以不等待延时期满,而是通过其它任务取消延时来使自己处于就绪态。这可以通过调用OSTimeDlyResume()和指定要恢复的任务的优先级来完成。实际上,OSTimeDlyResume()也可以唤醒正在等待事件(参看第六章——任务间的通讯和同步)的任务,虽然这一点并没有提到过。在这种情况下,等待事件发生的任务会考虑是否终止等待事件。

4 系统时间,OSTimeGet()和OSTimeSet()

无论时钟节拍何时发生,μC/OS-Ⅱ都会将一个32位的计数器加1。这个计数器在用户调用OSStart()初始化多任务和4,294,967,295个节拍执行完一遍的时候从0开始计数。在时钟节拍的频率等于100Hz的时候,这个32位的计数器每隔497天就重新开始计数。用户可以通过调用OSTimeGet()来获得该计数器的当前值。也可以通过调用OSTimeSet()来改变该计数器的值。OSTimeGet()和OSTimeSet()两个函数的代码如程序清单L5.4所示。注意,在访问OSTime的时候中断是关掉的。这是因为在大多数8位处理器上增加和拷贝一个32位的数都需要数条指令,这些指令一般都需要一次执行完毕,而不能被中断等因素打断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: