如何利用有限状态机实现多任务.pdfVIP

  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文档。上传文档
查看更多
如何利用有限状态机实现多任务.pdf

如何利用有限状态机实现多任务 如何利用有限状态机实现多任务 如如何何利利用用有有限限状状态态机机实实现现多多任任务务 文 墨鱼 当今许多嵌入式应用中,软件都是基于输入响应的方式组织,也称为反应式系统。把输入 信息进行归类有:离散事件、中断或定时器溢出等,而数值信号则用于传递。有限状态机正是 利用了这些输入的事件做为状态变更的依据,每一种状态对应执行一组操作,所以这种方式最 好是执行在一个由中断建立起来的硬件环境,这样就可充分利用这种机制而不必频繁的执行扫 描。不过由于需要根据输入的事件做相应的状态转换,会给软件的设计和编码带来的额外的负 担,复杂的系统直接影响了设计人员对软件的理解和组织,借助有效的状态机设计工具则可以 有效降低设计人员的负担。 在多任务操作系统中,有一种协作型系统,一个任务一直运行,直到该任主动放弃 CPU, 调度器安排另外一个任务运行。相应的,在没有调度器的情况下,我们也可以把对状态机的调 用过程依次安排在一个超循环里。 while( 1 ){ //调用状态机1,处理事件1 StateMachine_NO_1( ); //调用状态机2,处理事件2 StateMachine_NO_1( ); //状态机n StateMachine_NO_n( ); } 各状态机在设计的时候必须保证不会出现死循环或长时间等待某一事件。例如以往的前后 台方式等待定时器溢出使用的方法是不断查询标志位直到溢出为止,此时应该改为首先打开定 时器,然后切换状态进入查询是否溢出,未溢出立即退出,转而执行其它状态机;待下一次执 行到该状态机时由于状态仍处在查询定时溢出的状态之下,如果此时查询结果是定时器溢出将 切换到另一种状态执行相应操作。 StateMachine_NO_1(void ){ static uint8 sm_no1_state = 0; //用于存放状态机当前状态的值 //其它变量。 if( sm_no1_state = = 0){//状态机等于‘0’吗? //执行操作,例如执行点亮一个LED 500mS //执行完打开LED 操作后切换状态进入查询 500ms 时间到否 sm_no1_state = 1; //并打开定时器计数,500ms Star_Timer0_Delay_Ms(500); } if( sm_no1_state = = 1){ //状态机等于‘1’吗? //判断定时器是否溢出。 if( Rt_Timer0_full( ) = = 1){//每次只查询一次 //定时器溢出,关闭定时器,关闭LED //同时切换状态 sm_no1_state = 2; //再次打开定时器 Star_Timer0_Delay_Ms(500); } else ;//定时器未溢出保持当前状态退出,转而执行其它状态机。 } if( sm_no1_state = = 2){ //状态机等于‘2’吗? Ii( Rt_Timer0_full( ) = = 1){ //定时器溢出,关闭定时器 //同时切换状态 sm_no1_state = 0; } else ;//定时器未溢出保持当前状态退出,转而执行其它状态机。 }

文档评论(0)

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

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

1亿VIP精品文档

相关文档