实时多任务内核分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实时多任务内核分析

实时多任务系统内核分析 初次接触实时多任务操作系统的人,往往对实时程序的运行机制感到很困惑:任务在什么时候投入运行?操作系统以什么机制决定目前应该运行哪一个任务?本任务什么时候放弃了对CPU的控制?为了解答以上问题,我们从分析一个很简单的实时调度程序入手,来说明一下多任务程序的运行过程。 从结构上来说,实时多任务操作系统包括两部分,一部分为操作系统内核(kernel),即实时执行程序(Real Time Executive:RTX),另一部分是输入输出部分(I/O)(注意开发系统不属于操作系统的范畴);嵌入式系统对I/O的需求通常比较小(无文件系统需求),因此很多实时多任务操作系统本质上就是一个实时执行程序,如AMX(Kadak),VRTX(Microtec),iRMX(Intel)等(这里的X即:eXecutive),如果纯粹从kernel的角度来考察目前流行的各种实时多任务操作系统的性能,它们的效率差别都不大。 在市面上可以得到一些RTX的源代码(有用C实现的,有用汇编实现的,还有用PL/M语言实现的),从internet上也可以荡一些下来(我介绍一个站点,堪称世界电子工程师资源宝库),下面我要介绍的一个RTX版本(我命名为SRTX:short RTX),可以说是RTX中的元老级产品了,来自某研究所,九十年代初他们到美国考察,从美国某公司购得。五年以前,SRTX在国内有售,许多搞工控的研究所利用SRTX开发了一些大型或小型的产品,这里介绍的SRTX我作了一些简化和改动. 在功能上,SRTX的确无法和目前市售的实时多任务操作系统相比,不支持任务的调试,不支持优先级反转,甚至不支持相同优先级任务的分时间片运行;SRTX的功能单一,程序代码非常短,效率高(毕竟是80年代末的产品)。从内核的角度看,SRTX实现了一个较基本的任务调度版本;因此通过对SRTX的介绍,可以了解其他实时多任务产品内核的结构及实现方法。 任务的管理及程序实现 任务及程序结构: 从程序实现上说,任务就是一段能完成既定功能的程序代码。与一般的程序代码(或子程序)不一样的地方就在于任务是死循环的程序结构。 任务的通用程序结构如下: #define void TASK TASK Common_Task( void ) { Task_ Init(); // initialize data structure for this task while( 1 ) // loop forever { Suspend_Task_for_Msg(); //wait for message Process_This_Msg(); //process this message Post_Msg_to_Task(); //send message to other task } } 举例说明: 应用户的要求,需要在屏幕的右上角显示当前时钟,我们可以把此功能当作一个专用的任务来设计,该任务的功能是每隔一秒取出系统当前的时钟,转换成规定格式的字符串,将其指针传送给显示任务,接着继续等下一秒的到来。任务的程序实现结构为: TASK Alert_Clock( void ) { Set_String_NULL(); // initialize string while( 1 ) { Get_Current_Clock( ); //get clock Format_Clock_Str( ); //format digit to string Send_Msg_To_Task( DISPLAY,str ); //post message pointer to //DISPLAY task Suspend_Task( 100 ); //suspend 1 second } } 数据区及堆栈区的组织方法 以下讲一下SRTX的系统数据区及堆栈区的组织方法。 任务在运行的时候可能被更高优先级的任务中断,这时候任务需要将现场信息放到其堆栈中,以便今后能从该堆栈中取出被中断的现场信息(包括断点位置,任务状态等)恢复任务的断点运行,任务需要有自己独立的堆栈区以及描述任务运行状态措施,在实时多任务系统中,采用一种任务控制块(Task Control Block:TCB)的数据结构描述任务的运行状态,每个任务有一个TCB。 在SRTX中,采用如下方法定义任务的堆栈: max_task_no equ 32 ;support maxinum tasks

文档评论(0)

a888118a + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档