碧波液压网 欢迎你,游客。 登录 注册

μC/OS-II实时操作系统中任务延时的研究与改进

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  

  

  引言

  μC/OS—II是一种源代码公开、结构小巧、具有可剥夺实时内核的实时操作系统。绝大部分代码是用C语言编写的,便于移植到各种内核上。μC/OS—II使用时钟节拍完成任务的延时功能,每个时钟对所有的任务控制块进行扫描。时钟节拍率越高,系统的额外负荷就越重,而且会随着任务总数的增加而增加。

  本文详细分析μC/OS—II中的任务延时功能,对任务延时作适当改进。新创建一个任务延时链表,把需要延时的任务链接到延时列表中,这样每个时钟节拍只对延时任务的控制块进行扫描即可,由此降低了系统负荷,而且系统的开销不会随着任务总数的增加而增加,而仅仅与同时延时的任务数有关。

  1 μC/OS—II任务延时

  μC/OS—II系统中任务延时是时间管理功能的主要部分,而在μC/OS—II 2.81及以后的版本中,增加了软件定时器功能。不管是任务延时还是软件定时器,都需要一个硬件产生一个周期中断,也就是时钟节拍。

  μC/OS—II系统的时钟节拍的频率一般在10~100 Hz之间,时钟节拍率越高,系统的额外负荷就越重,影响系统的实时性。任务延时是在时钟节拍中断函数中实现的,时钟节拍中断函数调用时钟节拍函数OSTimeTick(),此函数的工作主要是扫描每一个任务控制块中的时间延时项OSTCBDly,完成任务的延时。由于OSTimeTick()要对每个任务都进行一遍同样的工作,因此它的运行时间和任务数的多少成正比。如果任务数比较多的话(现在μC/OS—II可以支持256个任务,而基于Cortex-M3内核可以支持1024个任务),函数OSTimeTick()占用大量的系统时间。

  本文使用的操作系统版本为μC/OS—II 2.86,此版本中与任务延时相关的函数包括:

  ①与任务延时设置相关的函数——任务延时函数OSTimeDly()与OSTimeDlyHMSM(),位于time.c文件中,用于任务自身调用,无条件的挂起自己延时一段时间;请求资源函数OS_FlagBlock()(请求事件标志)、OSMboxPend()(请求邮箱)、OSMutexPend()(请求互斥量)、OSQPend()(请求消息队列)、OSSemPend()(请求信号量)等,当资源请求不成功时,任务延时挂起;还有一个挂起其他任务的函数OSTaskResume(),但没有挂起其他函数一段时间的函数。

  ②与任务恢复有关的函数——恢复任务延时函数OSTimeDlyResume(),恢复因资源不满足而挂起任务的函数OS_EventTaskRdy()、OS_Fla-gTaskRdy(),把等待列表中的占用位清除,清任务延时值;任务删除函数OSTaskDel()、任务恢复函数OSTaskResume()等。

  ③时钟节拍处理函数OSTimeTick(),用于处理任务延时。

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论