嵌入式实时操作系统ucos ii译原版第5章_第1页
嵌入式实时操作系统ucos ii译原版第5章_第2页
嵌入式实时操作系统ucos ii译原版第5章_第3页
嵌入式实时操作系统ucos ii译原版第5章_第4页
嵌入式实时操作系统ucos ii译原版第5章_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.10节讨论了时钟的中断服务子程序和节时钟节函数OSTimeTick——µC/OS本章所提到的函数可以在OS_TIME.C的长短是用时钟节拍的数目来确定的。实现这个系统服务的函数叫做OSTimeDly()。调用该函程序清单L5.1所示的是任务延时函数OSTimeDly()的代码。用户的应用程序是通过提供延时的时钟节拍数——1655350[L5.1(1)],则表明用户不想延时任务,函数会立即返回到调用者。非0函数OSTimeDly()将当前任务从就绪表中移除[L5.1(2)]。接着,这个延时节拍数会被保存在当前任务的OS_TCB中[L5.1(3OSTimeTick延时节拍数。最后,既然任务已经不再处于就绪状态,任务调度程序会执行下一个优先级最L5.1voidvoidOSTimeDly(INT16U{if(ticks>0){if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBitX)==OSRdyGrp&=~OSTCBCur-}}OSTCBCur->OSTCBDly=}}OSTimeDly(1),在这种情况下,任务几乎就没有Figure DelayOSimlOIS_EREC(参看_G.H转换成时钟段,但这种方法有时显得比较愚笨。笔者增加了STeDMS就可以按小时()、分()、秒(S)和毫秒()来定义时间了,这样会显得更自然些。与Dl()一样,调用STmeyHM()函数也会使/SSTeDyHM者有其它的任务通过调用OTielRsm()取消了延时(参看5,恢复延时的任务OSTimDlsu程序清单L5.2OSTimeDlyHMSM()的代码。从中可以看出,应用程序是通过用小OSTimeDlyHMSM()一开始先要检验用户是否为参数定义了有效的值[L5.2(1)应的毫秒数相同。例如,若将时钟频率(OS_TICKS_PER_SEC100Hz(10ms4ms示,OSTimeDlyHMSM()确定了用户想延时多少次超过65,535个节拍的数目[L5.2(4)]和剩下的节拍数[L5.2(5)]。例如,若OS_TICKS_PER_SEC的值为100,用户想延时15分钟,则OSTimeDlyHMSM15x60x100=90,00032,768拍的延时(因为用户只能延时65,535个节拍而不是65536个节拍)和一次24,464个节拍的延时。在这种情况下,OSTimeDlyHMSM()首先考虑剩下的节拍,然后是超过65,535的节拍数[L5.2(7)和(8)](即两个32,768L5.2{INT32Uticks;INT16Uif(hours>0||minutes>0||seconds>0||milli>0)if(minutes>59)return}if(seconds>59)return}If(milli>999)return}ticks= *3600L*+(INT32U)minutes 60L*+(INT32U)seconds+OS_TICKS_PER_SEC*+500L/OS_TICKS_PER_SEC)/loopsloops=ticks/ticks=ticks%while(loops>0)}return}elsereturn}}OSTimeDlyResumeL5.3任务存在,OSTimeDlyResume()会检验任务是否在等待延时期满[L5.3(3)]。只要OS_TCB域中的OSTCBDly0OSTimeDly(),OSTimeDlyHMSM()或其它在第六章中所描述的PEND函数。然后延时就可以通过强制命令L5.3INT8UINT8UOSTimeDlyResume(INT8U{{OS_TCBif(prio>=OS_LOWEST_PRIO)returnptcb=(OS_TCBif(ptcb!=(OS_TCB*)0)if(ptcb->OSTCBDly!=0)ptcb->OSTCBDly=if(!(ptcb->OSTCBStat&OS_STAT_SUSPEND))|=ptcb-OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;}else}return}elsereturn}}elsereturn}}唯一问题是它要求用户分配事件控制块(参看6.00),因此用户的应用程序会多占用一些RAM。/S2调用SS49,75010z247通过调用OimetOTiSeOSme()和STeSL4OSme8L5.4INT32UINT32UOSTimeGet{INT32Uticks=OSTime;return}voidOSTimeSet(INT32U{OSTime=ticks;}开发板精品网5.3系统时间,OSTimeGet() C/OS32调用SSt(494,75010z2497可以通过调用OTimGetOTimSet(OSTmeG()和STieSeL54OSime832程序清单L5.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论