μc os-ii 实验一任务基本管理

上传人:第*** 文档编号:53458466 上传时间:2018-08-31 格式:PPT 页数:20 大小:390.50KB
返回 下载 相关 举报
μc os-ii 实验一任务基本管理_第1页
第1页 / 共20页
μc os-ii 实验一任务基本管理_第2页
第2页 / 共20页
μc os-ii 实验一任务基本管理_第3页
第3页 / 共20页
μc os-ii 实验一任务基本管理_第4页
第4页 / 共20页
μc os-ii 实验一任务基本管理_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《μc os-ii 实验一任务基本管理》由会员分享,可在线阅读,更多相关《μc os-ii 实验一任务基本管理(20页珍藏版)》请在金锄头文库上搜索。

1、实验目的,了解嵌入式操作系统C/OS-II的基本结构和基于C/OS-II的应用程序的基本结构 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 掌握C/OS-II中任务管理的基本方法(创建、启动、挂起、恢复任务、删除); 熟练使用C/OS-II任务管理的基本函数。,C/OS-II的应用程序结构,基于DevCpp的C/OS-II应用程序结构 基于ADS的C/OS-II应用程序结构,C/OS-II的任务代码结构,C/OS-II下的任务代码一般定义为一个任务函数,函数的主体通常是一个无限的循环 void MyTask(void *pdata) for (;) 用户代码; ,任务的状态及其

2、转换,正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态,系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。,处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态,一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态,任务的优先级,C/OS_II 把任务的优先权分为64个优先级别,每一个级别都用一个数字来表示。数字0表示任务的优先级别最高,数字

3、越大则表示任务的优先级别越低,任务创建,用户定义了任务函数,但C/OS_II不会理会这些代码,这些代码也不会运行。 任务创建的工作就是给任务分配一个任务控制块,并通过任务控制块把任务代码、任务堆栈关联起来形成一个完整的任务。 任务创建后,它就可以接受C/OS_II的管理和调度。,创建任务OSTaskCreate( )函数的原型如下: INT8U OSTaskCreate (void (*task)(void *pd),/指向任务的指针void *pdata, /传递给任务的参数 OS_STK *ptos, /指向任务堆栈栈顶的指针INT8U prio /任务的优先级 ),创建任务示例示例,vo

4、id MyTask(void *pdata) pdata = pdata; while(1) printf(“M“);Beep(1950, 20);n+;if(n=CharPerLine) printf(“n“);n = 0;OSTimeDly(OS_TICKS_PER_SEC); ,int main(void) OSInit();OSTaskCreate(MyTask, 0, ,任务的挂起和恢复,所谓挂起一个任务,就是由这个任务自身或其他任务暂时中止这个该任务的运行,并进入等待状态。 C/OS_II提供的系统函数OSTaskSuspend()用与挂起一个任务。 所谓任务恢复一个任务,就是将一

5、个挂起的任务恢复进入就绪状态。 C/OS_II提供的系统函数OSTaskResume()用于恢复一个挂起的任务。,等待状态,就绪状态,运行状态,OSTaskSupend(),OSTaskResume(),OS_TASK_SW(),任务CPU使用权被剥夺,挂起任务函数原型INT8U OSTaskSuspend (INT8U prio);如果参数prio为常数OS_PRIO_SELF,则表示挂起当前任务自身。 恢复任务函数原型:INT8U OSTaskResume (INT8U prio),任务挂起和恢复示例,void MyTask(void *pdata) while(1) printf(“Th

6、is is MyTask!n“);Beep(1950, 20); n+;/通过空循环进行延时if(n=10) printf(“MyTask Suspended!n“);n = 0; OSTaskSuspend(OS_PRIO_SELF); ,void YourTask(void *pdata) while(1) printf(“This is YourTask!n“);Beep(4000, 20); m+;/通过空循环进行延时 if(m=10) printf(“MyTask Resumed!n“);m = 0;OSTaskResume(5); ,/创建两个任务,优先级分别为5和6 OSTask

7、Create(MyTask, 0, ,任务删除,所谓删除一个任务,就是把任务置于休眠状态,具体的做法就是,把当初分配给该任务的任务控制块从任务控制块链表中删除,并归还给空任务控制块链表,然后就绪任务表中把该任务的就绪状态位置0. 删除一个任务,并不是说任务的代码被删除了,只是任务的代码不能被C/OS_II的内核管理和调用。,休眠状态,就绪状态,OSTaskCreate(),OSTaskDelete(),删除任务函数原型INT8U OSTaskDelelte (INT8U prio);如果参数prio为常数OS_PRIO_SELF,则表示删除当前任务自身。,任务删除示例,void MyTask(

8、void *pdata) while(1) printf(“This is MyTask!n“);Beep(1950, 20); n+;if(n=10) printf(“MyTask任务删除YourTask任务!n“); OSTaskDel(6); OSTimeDly(OS_TICKS_PER_SEC); ,void YourTask(void *pdata) while(1) printf(“This is YourTask!n“);Beep(4000, 20); OSTimeDly(OS_TICKS_PER_SEC); ,/创建两个任务,优先级分别为5和6 OSTaskCreate(MyT

9、ask, 0, ,基于MagicARM实验,int main(void) OSInit ();TargetInit (); OSTaskCreate(TaskStart,(void *)0, ,/TaskStart启动任务 void TaskStart(void *pdata) pdata = pdata;OSTaskCreate(TaskBeep,(void *)0, ,/ TaskBeep 蜂鸣器控制任务 void TaskBeep(void *pdata) pdata = pdata; IO0DIR |= BEEPCON; / 设置蜂鸣器为输出IO0SET = BEEPCON; whil

10、e(1) IO0CLR = BEEPCON;OSTimeDly(OS_TICKS_PER_SEC);/延时,让操作系统进行任务调度IO0SET = BEEPCON;OSTimeDly(OS_TICKS_PER_SEC); ,/ TaskLed Led控制任务 void TaskLed(void *pdata) pdata = pdata; while(1) IO2DIR |= LEDCON; / 设置LED输出IO2SET = LEDCON; IO2CLR = LEDCON;OSTimeDly(OS_TICKS_PER_SEC );IO2SET = LEDCON;OSTimeDly(OS_TICKS_PER_SEC); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号