基于嵌入式实时操作系统的程序设计技术+周航慈.pdf

基于嵌入式实时操作系统的程序设计技术+周航慈.pdf

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
基于嵌入式实时操作系统的程序设计技术+周航慈.pdf

第四章 任务设计 在基于实时操作系统的应用程序设计中,任务设计是整个应用程序的基础,其他软件设 计工作都是围绕任务设计来展开,任务设计就是设计“任务函数”和相关的数据结构。 4.1 任务函数的结构 在用户任务函数中,必须包含至少一次对操作系统服务函数的调用,否则比其优先级低 的任务将无法得到运行机会,这是用户任务函数与普通函数的明显区别。任务函数的结构按 任务的执行方式可以分为三类:单次执行类、周期执行类和事件触发类,下面分别介绍其结 构特点。 4.1.1 单次执行的任务 此类任务在创建后只执行一次,执行结束后即自行删除,其任务函数的结构如下: 程序清单L4-1 单次执行任务函数的结构 void MyTask (void *pdata) //单次执行的任务函数 { 进行准备工作的代码; 任务实体代码; 调用任务删除函数; //调用 OSTaskDel(OS_PRIO_SELF) } 单次执行的任务函数由三部分组成:第一部分是“进行准备工作的代码”,完成各项准 备工作,如定义和初始化变量、初始化某些设备等等,这部分代码的多少根据实际需要来决 定,也可能完全空缺。第二部分是“任务实体代码”,这部分代码完成该任务的具体功能, 其中通常包含对若干系统函数的调用,除若干临界段代码(中断被关闭)外,任务的其它代 码均可以被中断,以保证高优先级的就绪任务能够及时运行。第三部分是“调用任务删除函 数”,该任务将自己删除,操作系统将不再管理它。 单次执行的任务采用“创建任务函数”来启动,当该任务被另外一个任务(或主函数) 创建时,就进入就绪状态,等到比它优先级高的任务都被挂起来时便获得运行权,进入运行 状态,任务完成后再自行删除,“启动任务”就是一个例子。 采用“启动任务”后,主函数就可以简化为三行,只负责与操作系统有关的事情,即初 始化操作系统、创建“启动任务”、启动操作系统,使主函数的内容固定下来,与具体的应 用系统无关。真正启动系统所需要的准备工作由“启动任务”来完成,它的内容与具体的系 - 1 - 统密切相关。主函数和“启动任务”的示意代码如下: 程序清单L4-2 使用启动任务 void main (void) //主函数 { OSInit (); //初始化操作系统 OSTaskCreate(TaskStart,(void *)0,&TaskStartStk[TASK_STK_SIZE-1],1);//创建启动任务 OSStart (); //启动操作系统,开始对任务进行调度管理 } void TaskStart(void *pdata) //启动任务 { pdata = pdata; 系统硬件初始化; // 时钟系统、中断系统、外设等等 创建各个任务; //如键盘任务、显示任务、采样任务、数据处理任务、打印任务等等 创建各种通信工具; //如信号量、消息邮箱、消息队列等等 OSTaskDel (OS_PRIO_SELF); //删除自己 } 在“启动任务”中完成与系统硬件有关的各种初始化工作,然后创建各个实质任务和所 需要的各种通信工具,至此系统才真正完成准备工作,“启动任务”的使命也就结束了,最 后将自己删除。为了保证“启动任务”能够连续运行,必须将“启动任务”的优先级选择为 最高。否则,当“启动任务”创建一个优先级高于自己的任务时,刚刚创建的任务就会立即 进入运行状态,而与这个任务关联的其它任务可能还没有创建,它使用的通信工具也还没有 创建,系统必然出错。“启动任务”调用的“自我删除”函数会进行任务调度操作,从而使 系统开始运行各个实质任务。 由于“启动任务”不是用户系统的实质任务,又占用高优先级资源和任务资源,故不常 用。更常用的方法是将“启动任务”所完成的操作交给一个用户系统的实质任务来完成。这 时,主函数和有启动功能的任务函数的示意代码如下: 程序清单L4-3 以用户任务代替启动任务 void ma

文档评论(0)

wfkm + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体汤**

1亿VIP精品文档

相关文档

相关课程推荐