• 状态机


    状态机(FSM),它其实是一种思想,即一种套路。

    这种思想就是,根据输入来改变状态。

    常常用在电路设计中(FPGA中也有用到),也会用在程序编写中。

    状态机分为两种:

    1,输出状态与输入没有关系:比如有好几个按键,无论按下哪一个开关,小灯都会亮,无论你关掉哪个开关,小灯都会灭。

    2,输出状态与输入有关系:比如,按下一号开关红灯亮;按下二号开关路灯亮;按下三号开关黄灯亮。

    状态机主要用于解决一些不是既定的程序。比如用于解决一些互动的程序。

    既定的程序是死的,我们能够根据时间判断出程序下一步的变化,但是互动的程序,需要根据人的输入来决定下面的程序走向。

    举一个状态机的例子:(电路如何搭建状态机,这里就不演试了,因为咱是编软件的。)

    题目:开锁状态机

    功能描述:用户连续输入正确的密码则会开锁,

    如果密码输入过程错误则锁会退回到初始状态,重新计入密码。

    即用户只需要连续输入出正确的密码才可以开锁,不可以输入错误,不能撤销和删除。

    #include<stdio.h>

    typedef enum

    {

    STATE1,

    STATE2,

    STATE3,

    STATE4,

    STATE5,

    STATE6,

    STATE7,

    }STATE;

    int main (void)

    {

    int num=0;

    STATE current_state=STATE1;

    //第一步:实现一个用户循环输入密码的循环。

    while(1)

    {

    switch()

    {

    case STATE1:

      if(num==1)

      {

      current_state=STATE2;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

    case STATE2:

      if(num==2)

      {

      current_state=STATE3;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

    case STATE3:

      if(num==3)

      {

      current_state=STATE3;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

    case STATE4:

      if(num==4)

      {

      current_state=STATE4;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

    case STATE5:

      if(num==5)

      {

      current_state=STATE5;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

      

    case STATE6:

      if(num==6)

      {

      current_state=STATE6;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

    case STATE7:

      if(num==7)

      {

      current_state=STATE7;  //用户输入对了一步,STATE走一步。

      }

      else

      {current_state=STATE1;}

      default:

      current_state=STATE1;

    }

    if (current_state==STATE7)

    {

    print("锁开了。 ");

    break;  //跳出while(1)

    }

    }

    return 0;

    }

    感觉之前读过一篇文章,

    文章中说,利用状态机可以写大循环式的程序框架。(这样可以实现一些多线程的编程??)

  • 相关阅读:
    K8S calico
    K9S之glusterfs
    kubeadm安装报错
    创建crd和cr
    分布式学习汇总
    容器常见问题分析
    项目迁移到k8s平台流程
    K8S storageclass
    awk命令
    K8S headless service服务详解
  • 原文地址:https://www.cnblogs.com/chulin/p/11192059.html
Copyright © 2020-2023  润新知