ucOSII 学习之初识实时操作系统-时间管理
2014-08-23 15:15
197 查看
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位的数都需要数条指令,这些指令一般都需要一次执行完毕,而不能被中断等因素打断。
相关文章推荐
- 从零开始学习UCOSII操作系统5--时间管理
- RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny
- RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny
- 我的时间管理-生活与学习
- 最近开始学习个人时间管理
- 我的时间管理--无压学习,快乐生活
- 让工作学习变得轻松——高效的时间管理
- QNX实时操作系统学习笔记之嵌入式系统(二)
- 嵌入式实时操作系统μC/OS-||原理及应用学习1
- 学习习惯(二):时间管理
- 学会管理你的学习时间
- 我的时间管理——高效无压的学习 .
- 操作系统学习笔记(14) 存储管理-储存管理的任务
- 项目管理学习笔记之三时间管理过程总结
- 《暗时间》的笔记-学习习惯(二):时间管理
- 项目时间管理公式学习
- 跟sheldon学习时间管理
- 一直在学习的时间管理
- 我的时间管理-生活与学习
- 我的时间管理——高效无压的学习