[C语言] 用C实现状态机编程

[复制链接]
1724|7
 楼主| austin丁 发表于 2015-4-28 19:27 | 显示全部楼层 |阅读模式
我想用C实现下图的状态机,有能朋友指点下吗?
C:\Users\Administrator\Desktop\QQ截图20150428192500.jpg
我的想法是先定义三个状态,在用if语句实现,可是怎么实现状态切换及实现功能呢
 楼主| austin丁 发表于 2015-4-28 19:29 | 显示全部楼层
不太会发图片啊

本帖子中包含更多资源

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

×
zhql168 发表于 2015-4-28 20:31 | 显示全部楼层
三个功能子程序,根据三个标志位的状态是否执行,状态切换根据自己的逻辑需要看在循环里,每个功能子程序等进行逻辑处理就可以了,乱说的哈,我其实是个菜鸟。
 楼主| austin丁 发表于 2015-4-28 20:41 | 显示全部楼层
我试着写了一个,不知道对不对
/*定义状态*/
#define NoTrigger 0x01
#define HalfTrigger 0x02
#define FullTrigger 0x03
int NextState = NoTrigger;//定义全局变量,NextState,初始状态为NoTrigger

uint checkstate(int Value,int CurrentState,int Vmin,int Vmax)
{
  uint i = 0; //计数值
  uint p = 0; //标志位
  switch(CurrentState)
  {
    case NoTrigger:
      if(Value<Vmin)
        NextState = NoTrigger;
      else if(Value>Vmin&&Value<Vmax)
        NextState = HalfTrigger;
      else
        NextState = FullTrigger;
      break;
    case HalfTrigger:
      if(Value<Vmin)
        NextState = NoTrigger;
      else if(Value>Vmax)
        NextState = FullTrigger;
      break;
    case FullTrigger:
      if(Value<Vmin)
        NextState = NoTrigger;
      else if(Value>Vmin&&Value<Vmax)
        NextState = HalfTrigger;
      else if(Value>Vmax)
      {
        i++;
        if(i==10)
        {
          i = 0;
          p = 1;
        }
      }
    default:break;
  }
  return p;
}
在主函数的循环中,形参CurrentState用NextState代替,Value值也更新
 楼主| austin丁 发表于 2015-4-28 20:42 | 显示全部楼层
zhql168 发表于 2015-4-28 20:31
三个功能子程序,根据三个标志位的状态是否执行,状态切换根据自己的逻辑需要看在循环里,每个功能子程序等 ...

你看下我下面这样写行吗:)
zhql168 发表于 2015-5-4 18:41 | 显示全部楼层
我理解中也是这样的
 楼主| austin丁 发表于 2015-5-5 21:13 | 显示全部楼层
zhql168 发表于 2015-5-4 18:41
我理解中也是这样的

嗯,我已经用这个做出来了,有点小错误,程序中的“i”要定义成全局变量才行
yelv21 发表于 2015-5-7 11:37 | 显示全部楼层
楼主 你这个好像也可以用在边沿检测吧,也是状态,但是思路不错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

41

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部