时间片调度在单片机中的运用.docVIP

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

时间片调度在单片机中的运用 单片机在系统中充当CPU的角色,需要同时处理多个事务。如与PC机通用信,将受到的信息转发给从机,监视数据处理情况等一些繁杂而又重要的事情。如何协调好各个事物,这就需要在编写程序时采用合适的算法进行处理。一般方法就是在单片机中移植操作系统,由操作系统来管理各个事物。但由于系统要占用一定的内部资源,这对本身资源非常有限的单片机俩说是不现实的。所以,很少在单片机中采用操作系统,而是采用时间片轮询调度的方法进行各任务的管理。时间片轮询调度是一种古老而又简单的算法,广泛的运用于无操作系统的微处理器中。 在系统中,每个进程被分配一个时间段,称作时间片, nbsp; 即该进程允许运行的时间。如果在时间片结束时进程还在运行,则 CPU 将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束 nbsp; ,则 CPU 当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。 时间片轮询调度中有趣的一点是如何确定时间片的长度。从一个进程切换到另一个进程是需要一定时间的,因为要保存和装入寄存器值及内 nbsp; 存映像等保护现场的工作,更新各种表格和队列等。假如进程切换,有时称为上下文切换,需要的时间为 5 毫秒,再假设时间片长度设定为 nbsp; 20 毫秒,则在做完 20 毫秒有用的工作之后, CPU 将花费 5 毫秒来进行进程切换。 CPU时间的 20% 被浪费在了管理开销上。进程切换时间一定的情 nbsp; 况下,如果时间片长度设定的越小时,这种浪费更明显。所以,时间片长度与 CPU 利用率是一对不可调和的矛盾,必须处理好它们之间的关 nbsp; 系。 为了提高 CPU 效率,我们可以将时间片长度设得大一些,这时浪费的时间只有就会相对减小。但在一个分时系统中,各个任务对时间片长度 nbsp; 的要求是不一致的。例如在一个系统中,可能要求每秒钟更新一下显示内容,每几十毫秒要扫描一下按键,每几毫秒要检测一下串口缓冲区 nbsp; 等……可见,各个任务对时间的依赖程度是不一样的。如果时间片设得太长,某些对实时性要求高的任务可能得不到执行,使得系统的实时 nbsp; 性变差。总之,时间片的设定应满足对实时性要求最高的那个任务,这样才能确保每个任务都可以及时得到执行而不被错过。 要在一个单片机系统中实现时间片轮询调度,需要依照以下的步骤 : 2 确定任务总数及各个任务实对时间实时性的要求 2 根据任务对时间的要求,确定时间片的长度 2 估算执行每个任务所花费的时间,确保任务能够在时间片的长度内执行完毕 2 如果任务较大,时间片不足于让任务执行完,此时可细化该任务 在下面的代码片段中,共有 4 个任务需要执行,其中串口对实时性的要求最高。串口采用的波特率为 2400Baud , 8 位数据,无校验, 1 个停止 nbsp; 位。所以传输 1 字节数据所需时间为: 4.17ms ,故将时间片长度设定在 4ms 是合理的。单片机主机系统的时间片处理函数如下所示: nbsp; #pragma interrupt_handler timer1_ovf_isr:9 void timer1_ovf_isr void //TIMER1 has overflowed TCNT1H 0xF0; //reload counter high value TCNT1L 0x60; //reload counter low value TimeCount++; if TimeCount 50 TimeCount 0; CC1100_SendFlag 1; // 无线收发任务处理标志 TimeOver ; // 超时检测函数 Alarm_Detect ; // 告警检测函数 DealComFlag 1; // 串口任务处理标志 在主函数中,根据标志位调用相应的函数进行数据处理,然后将标志位清除,等到下一个时间片到来后再开始新一轮的数据处理。 nbsp; int main void if CC1100_SendFlag 1 ... ; CC1100_SendFlag 0; // 无线收发任务处理标志 if DealComFlag 1 ... ; DealComFlag 0; // 串口任务处理标志 ......

文档评论(0)

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

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

1亿VIP精品文档

相关文档