独闷闷网

 找回密码
 立即注册
搜索
查看: 1931|回复: 0
收起左侧

[原创] 鸿哥所谓的状态机结构大概是什么样的思路?已解答。

[复制链接]
发表于 2014-12-17 19:11:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 jianhong_wu 于 2014-12-17 19:13 编辑

MCU编程-华力:
鸿哥能写个状态机裸结构框架的介绍吗?这样会让更多初学者能够看懂读懂后面的内容.一上来就将状态机结构很多初学者看的西路糊涂.可以举一个思路吗?具体灵活应用,可以举一反三。


鸿哥-深圳:
你看我“第三节:累计主循环次数使LED灯闪烁”,这些讲的很清晰了。
  1. void led_flicker() ////第三区 LED闪烁应用程序
  2. {
  3.   
  4.   switch(ucLedStep)
  5.   {
  6.      case 0:
  7. /* 注释三:
  8. * uiTimeCnt累加循环次数,只有当它的次数大于或等于设定上限const_time_level时,
  9. * 才会去改变LED灯的状态,否则CPU退出led_flicker()任务,继续快速扫描其他的任务,
  10. * 这样的程序结构就可以达到多任务并行处理的目的。
  11. * 本程序基于坚鸿51单片机学习板
  12. */
  13.           uiTimeCnt++;  //累加循环次数,
  14.                   if(uiTimeCnt>=const_time_level) //时间到
  15.                   {
  16.                      uiTimeCnt=0; //时间计数器清零
  17.              led_dr=1;    //让LED亮
  18.                          ucLedStep=1; //切换到下一个步骤
  19.                   }
  20.               break;
  21.      case 1:
  22.           uiTimeCnt++;  //累加循环次数,
  23.                   if(uiTimeCnt>=const_time_level) //时间到
  24.                   {
  25.                      uiTimeCnt=0; //时间计数器清零
  26.              led_dr=0;    //让LED灭
  27.                          ucLedStep=0; //返回到上一个步骤
  28.                   }
  29.               break;
  30.   
  31.   }

  32. }
复制代码

你看看我是怎么样通过切换switch(ucLedStep)中ucLedStep这个变量,来根据不同的条件跳到不同的case 中,这个是万能的状态机思路。

MCU编程-华力:
状态机程序我写过,每一层依据上一层的判断来进行下一层的执行。没有你的灵活。

鸿哥-深圳:
是的。但是我想说的是,我的连载《从业将近十年!手把手教你单片机程序框架》不仅仅是状态机,它有我很多独特的项目框架模板在里面,比如按键,显示,跑马灯,串口他们的模板框架。

MCU编程-华力:
看出来了,的确很灵活,不只是依据当前状态切换到下一状态这么固定。

鸿哥-深圳:
对。你可以根据需要跳到任意一个case。

MCU编程-华力:
恩,我再好好看看。谢谢鸿哥。


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2021-6-18 10:35 , Processed in 0.177606 second(s), 18 queries .

快速回复 返回顶部 返回列表