嵌入式系统及应用.pptVIP

  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文档。上传文档
查看更多
* * * * * * * * * * * * * * * 从上面可看出,想延时1个tick,但实际 上只延时了0-1个tick之间。在负荷很重的系统中,任务甚至可能会在下个tick中断即将发生之前调用OSTimeDly(1). 在这种情况下,任务几乎没有任何延时。 先看一个延时1个tick的例子。假设系统每隔10ms发生1次tick中断。 下一个tick处理程序时,该任务延时到,内核会将其就绪。 * 更一般的例子:例1 优先级高的任务和中断服务超前于要求延时1个延时tick的任务运行。虽然该任务想延时20ms,但由于优先级的缘故,实际上每次延时多少是变化的。 * 更一般的例子:例2 所有高优先级的任务和中断服务的执行时间略微短于1个tick,如果任务将自己延时1个tick的请求刚好发生在下一个tick之前,则这个任务的再次执行几乎是立即开始的。 因此,如果要求任务的延时至少为1个tick,则要多定义1个tick的延时。 * 更一般的例子:例3 所有高优先级的任务和中断服务的执行时间长于1个tick。在这种情况下,拟延时的1个时钟节拍的任务实际上在2个tick之后才开始运行。这种情况在某些应用中或许是可以的,而在大多数情况下是不可接受的。 * 上述情况在所有的实时内核中都会出现,这与CPU负荷有关,也可能与系统设计不正确有关。那怎么避免这些问题呢? 时间管理 增加微处理器的时钟频率 增加时钟节拍的频率 重新安排任务的优先级 避免使用浮点运算 使用能较好优化程序代码的编译器 时间要求苛刻的代码用汇编语言写 * 时间管理 时间管理中一种常用技术:时间等待链,用来存放需要延迟处理的对象, 产生tick后,需要对时间等待链中的对象的剩余等待时间值进行处理。 对于时间等待的对象,通常都被组织为差分链表的方式进行管理,以有效降低时间等待对象的管理开销。 在时间差分链中,每个表项所包含的计时值并非当前时刻到表项激活时刻的绝对计数,而是该表项和先于它的所有表项的计数值之和。 * 3 A 2 B 5 C 4 D 3 A 2 B 3 C 4 D 2 E A对象需要等待3个时间单位就应被激活 B对象需要等待5(3+2)个时间单位就应被激活 C对象需要等待10(3+2+5)个时间单位就应被激活 D对象需要等待14(3+2+5+4)个时间单位就应被激活 7 E 差分链 由于7-3-2=2,而7-3-2-5=-3, 因此E对象需要插入到差分链中介于对象B和对象C之间的位置。 * 时间管理 对于差分时间链,系统每接收到一个tick,就修订链首对象的时间值。如果链表对象的时间单位为tick,则每发生一个tick,链首对象的时间值就减1,当减到0时,链首对象就被激活,并从差分时间链中取下来,下一个对象又成为链首对象。 * 时间管理 在时间方面,内核通常提供以下功能: 设置系统时间。使应用能够设置当前系统的日期和时间。 获得系统时间。以日历时间、系统启动以来所经历的tick数等形式获得当前的系统时间。 维护系统时间、处理定时事件。通过时钟中断,维持系统日志时间、任务延迟时间、超时、单调速率周期、实现时间片等内容。 * 时间管理 在定时方面,内核通常提供以下功能: 创建软件定时器。分配一个定时器数据结构,创建一个软件定时器,并为这个定时器分配用户指定的名字。新创建的定时器没有被激活,且没有相应的定时器服务例程。软件定时器创建成功后,将为该定时器分配一个ID标识。 * typedef struct { timer_class class; timer_state state; timer_time initial; timer_time timeRemain; timer_time startTime; timer_service_routine_entry handler; void *usrData; attribute type; unsigned32 repeatCount; unsigned32 repeatRemain; } timerInformation; 软件定时器数据结构 class表示所创建定时器的触发时间类型,可以是相对时间触发,也可以是绝对时间触发。state表示定时

文档评论(0)

0258 + 关注
文档贡献者

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

1亿VIP精品文档

相关文档