嵌入式实时操作系统(第7课时)课件.ppt

嵌入式实时操作系统(第7课时)课件.ppt

ID:56987810

大小:190.50 KB

页数:17页

时间:2020-07-25

嵌入式实时操作系统(第7课时)课件.ppt_第1页
嵌入式实时操作系统(第7课时)课件.ppt_第2页
嵌入式实时操作系统(第7课时)课件.ppt_第3页
嵌入式实时操作系统(第7课时)课件.ppt_第4页
嵌入式实时操作系统(第7课时)课件.ppt_第5页
资源描述:

《嵌入式实时操作系统(第7课时)课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式实时操作系统第三章µc/os-II的中断和时钟3.3时间管理3.3.1任务的延时µc/os-II规定:除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly(),使当前任务的运行延时(暂停)一段时间并进行一次任务调度,以让出CPU的使用权。OSTimeDly()函数的代码如下:voidOSTimeDly(INT16Uticks){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifif(ticks>0){OS_ENTER_C

2、RITICAL();if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBitX)==0){OSRdyGrp&=~OSTCBCur->OSTCBBitY;//取消当前任务的就绪状态}OSTCBCur->OSTCBDly=ticks;//延时节拍数存入任务控制块OS_EXIT_CRITICAL();OS_Sched();}}函数的参数ticks是以时钟节拍数为单位的延时时间的。为了能使用更为习惯的方法来使任务延时,µc/os-II还提供了一个可以用时、分、秒

3、为参数的任务的延时函数OSTimeDlyHMSM()。该函数的原型如下:INT8UOSTimeDlyHMSM(INT8Uhours,//时INT8Uminutes,//分INT8Useconds,//秒INT16Umilli,//毫秒);这个函数与函数OSTimeDly()一样也要引发一次调度。调用了函数OSTimeDly()或OSTimeDlyHMSM()的任务,当规定的延时时间期满,或有其他任务通过调用函数OSTimeDlyResume()取消了延时时,它会立即进入就绪状态。3.3.2取消任务的

4、延时延时的任务可通过在其他任务中调用函数OSTimeDlyResume()取消延时而进入就绪状态。如果任务比正在运行的任务优先级别高,则立即引发一次任务调度。OSTimeDlyResume()函数的原型如下:INT8UOSTimeDlyResume(INT8Uprio){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifOS_TCB*ptcb;if(prio>=OS_LOWEST_PRIO){return(OS_PRIO_INVALID);}OS_ENTER

5、_CRITICAL();ptcb=(OS_TCB*)OSTCBPrioTbl[prio];if(ptcb!=(OS_TCB*)0){if(ptcb->OSTCBDly!=0){ptcb->OSTCBDly=0;if((ptcb->OSTCBStat&OS_STAT_SUSPEND)==OS_STAT_RDY){OSRdyGrp

6、=ptcb->OSTCBBitY;OSRdyTbl[ptcb->OSTCBY]

7、=ptcb->OSTCBBitX;OS_EXIT_CRITICAL();OS_Sched();

8、}else{OS_EXIT_CRITICAL();}return(OS_NO_ERR);}else{OS_EXIT_CRITICAL();return(OS_TIME_NOT_DLY);}}OS_EXIT_CRITICAL();return(OS_TASK_NOT_EXIST);}例3-3本例应用程序的任务使用了延时函数OSTimeDly()进行延时。在任务MyTask中还调用了函数OSTimeDlyResume(prio)取消了任务YouTask的延时。为了观察任务YouTask的延时时间的变化,

9、在钩子函数OSTimeTickHook()输入了任务YouTask在延时时间到时的时钟节拍数。答:应用程序代码如下:/******************************************TEST****************************************/#include“includes.h”#defineTASK_STK_SIZE512//任务堆栈长度OS_STKMyTaskStk[TASK_STK_SIZE];//定义任务堆栈区OS_STKYouTaskSt

10、k[TASK_STK_SIZE];//定义任务堆栈区INT16Skey;//用于退出µc/os-II的键INT8Ux=0,y=0;//字符显示位置voidMyTask(void*data);//声明任务voidYouTask(void*data);//声明任务/*************************************主函数***********************************/voidmain(void){char*s_M=“M”;/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。