ucos-ii多任务编程设计

ucos-ii多任务编程设计

ID:9218451

大小:368.33 KB

页数:18页

时间:2018-04-23

ucos-ii多任务编程设计_第1页
ucos-ii多任务编程设计_第2页
ucos-ii多任务编程设计_第3页
ucos-ii多任务编程设计_第4页
ucos-ii多任务编程设计_第5页
资源描述:

《ucos-ii多任务编程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第四章任务设计在基于实时操作系统的应用程序设计中,任务设计是整个应用程序的基础,其他软件设计工作都是围绕任务设计来展开,任务设计就是设计“任务函数”和相关的数据结构。4.1任务函数的结构在用户任务函数中,必须包含至少一次对操作系统服务函数的调用,否则比其优先级低的任务将无法得到运行机会,这是用户任务函数与普通函数的明显区别。任务函数的结构按任务的执行方式可以分为三类:单次执行类、周期执行类和事件触发类,下面分别介绍其结构特点。4.1.1单次执行的任务此类任务在创建后只执行一次,执行结束后即自行删除,其任务函数的结构如下:程序清单L4-1单次执行任务函数的结构v

2、oidMyTask(void*pdata)//单次执行的任务函数{进行准备工作的代码;任务实体代码;调用任务删除函数;//调用OSTaskDel(OS_PRIO_SELF)}单次执行的任务函数由三部分组成:第一部分是“进行准备工作的代码”,完成各项准备工作,如定义和初始化变量、初始化某些设备等等,这部分代码的多少根据实际需要来决定,也可能完全空缺。第二部分是“任务实体代码”,这部分代码完成该任务的具体功能,其中通常包含对若干系统函数的调用,除若干临界段代码(中断被关闭)外,任务的其它代码均可以被中断,以保证高优先级的就绪任务能够及时运行。第三部分是“调用任务删

3、除函数”,该任务将自己删除,操作系统将不再管理它。单次执行的任务采用“创建任务函数”来启动,当该任务被另外一个任务(或主函数)创建时,就进入就绪状态,等到比它优先级高的任务都被挂起来时便获得运行权,进入运行状态,任务完成后再自行删除,“启动任务”就是一个例子。采用“启动任务”后,主函数就可以简化为三行,只负责与操作系统有关的事情,即初始化操作系统、创建“启动任务”、启动操作系统,使主函数的内容固定下来,与具体的应用系统无关。真正启动系统所需要的准备工作由“启动任务”来完成,它的内容与具体的系-1-统密切相关。主函数和“启动任务”的示意代码如下:程序清单L4-2

4、使用启动任务voidmain(void)//主函数{OSInit();//初始化操作系统OSTaskCreate(TaskStart,(void*)0,&TaskStartStk[TASK_STK_SIZE-1],1);//创建启动任务OSStart();//启动操作系统,开始对任务进行调度管理}voidTaskStart(void*pdata)//启动任务{pdata=pdata;系统硬件初始化;//时钟系统、中断系统、外设等等创建各个任务;//如键盘任务、显示任务、采样任务、数据处理任务、打印任务等等创建各种通信工具;//如信号量、消息邮箱、消息队列等等O

5、STaskDel(OS_PRIO_SELF);//删除自己}在“启动任务”中完成与系统硬件有关的各种初始化工作,然后创建各个实质任务和所需要的各种通信工具,至此系统才真正完成准备工作,“启动任务”的使命也就结束了,最后将自己删除。为了保证“启动任务”能够连续运行,必须将“启动任务”的优先级选择为最高。否则,当“启动任务”创建一个优先级高于自己的任务时,刚刚创建的任务就会立即进入运行状态,而与这个任务关联的其它任务可能还没有创建,它使用的通信工具也还没有创建,系统必然出错。“启动任务”调用的“自我删除”函数会进行任务调度操作,从而使系统开始运行各个实质任务。由于

6、“启动任务”不是用户系统的实质任务,又占用高优先级资源和任务资源,故不常用。更常用的方法是将“启动任务”所完成的操作交给一个用户系统的实质任务来完成。这时,主函数和有启动功能的任务函数的示意代码如下:程序清单L4-3以用户任务代替启动任务voidmain(void)//主函数{OSInit();//初始化操作系统OSTaskCreate(TaskUser1,(void*)0,&TaskUser1Stk[TASK_STK_SIZE-1],1);//创建任务1OSStart();//启动操作系统,开始对任务进行调度管理}-2-voidTaskUser1(void*

7、pdata)//用户任务1{pdata=pdata;系统硬件初始化;//时钟系统、中断系统、外设等等创建各个任务;//如键盘任务、显示任务、采样任务、数据处理任务、打印任务等等创建各种通信工具;//如信号量、消息邮箱、消息队列等等用户任务1本身的代码;}使用“单次执行”的任务函数结构的场合反而是可以多次执行的任务,每当需要执行该任务时就将该任务创建一次。由键盘操作来启动的任务常采用这种结构,如用一个“发送”按钮启动串行口通信任务,其程序如下:程序清单L4-4用创建任务的方式启动任务voidTaskKey(void*pdata)//键盘任务函数(示意){INT8

8、Ukey;for(;;)//无限循环,

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

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

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