状态机FSM理解

1.状态机的概念:在特定的时间,发生特定的动作。

2.什么时候用状态机:电路具有逻辑顺序(各模块需要串行执行、先后执行、非并行执行)时序规律(一定时间内重复有规律的执行事情)。

3.状态机设计思路:(往往从状态变量入手)

        1):从状态变量入手。如果一个电路具有逻辑顺序或时序规律,我们就可以自然而然的根据顺序的节点规划出状态,从这些状态入手,分析每个状态的输入、状态转移条件、输出。从而完成电路功能。

        2):从输出入手。首先明确电路的输出关系,这些输出相当于状态的输出,回溯规划出每个状态、状态转移条件和输入。(功能复杂,无法一开始便确定输出,则无法从此思想进行出发)

3.避免状态机进入死循环状态,无法跳出。

状态的一些基本抽象原则
将待解决的实际问题抽象成状态机是一件非常灵活的事情,经过不断的摸索、尝试和总结,每个人都会形成自己的风格。不过灵活归灵活,在进行状态抽象的时候,还是有一些基本原则可以参考的,介绍如下:

基本原则一:按流程抽象
流程其实就是多个事务的有序组合。要完成一件事情,通常可以将它分成多个事务,即按照“先做什么,再做什么,……,最后做什么”的思路来将一个较为复杂的事情拆分成一系列比较简单事务,从而化一个复杂的问题为多个简单的问题,逐个解决即可完成任务。例如,要想为家人做上一顿可口的饭菜,按照流程的思路,大致如此——先要解决买菜的问题,然后是洗菜、切菜,接下来是炒菜、做主食,最后是盛菜、盛饭。这中按照流程来划分出多个事务的思想在人类日常的生活和生产中经常可以看到,因此,在进行状态机状态的抽象时,如果能够将时序电路所需完成的任务按照流程的思想分解开来,那么流程中的每一个事务就可以做为一个状态。

基本原则二:按功能抽象
功能其实就是多个事务的无序组合。要想准确的描述一个事物,通常可以将这个事物按照其功能分成多个事务,即按照“可以做什么,也可以做什么,……,还可以做什么”的思路来将一个较为复杂的事物拆分成一系列事务,从而化一个复杂的事物为多个简单功能事务的集合,逐个介绍即可完成对整个事物的准确描述。例如,要想向别人炫耀一下新买的手机,大致如此——“你看,咱这个手机不光可以听音乐、看视频、收广播,还可以上网、拍照、玩游戏,倍有面子”等等。这种按照功能来划分出多个事务的思想在人类日常的生活和生产中也经常可以看到,因此,在进行状态机状态的抽象时,如果能够将时序电路所应具有的特征按照功能的思想分解开来,那么功能集合中的每一个事务就可以做为一个状态。

基本原则三:按复杂度抽象
基于流程的思想侧重于从“如何做”的角度来解决问题,而基于功能的思想则侧重于从“做哪些”的角度来解决问题,这两种思想各有所长、各有侧重,需要针对具体的状态抽象问题来综合考虑。

不过无论是基于流程还是基于功能的状态抽象思想,其对于原始问题分解的粗细程度都是非常主观的,因此最后,我们还需要在上述抽象后的状态基础上,进一步分析每个状态的复杂程度。如果发现某些状态过于复杂,那么将再次按照基于流程或者基于功能的思想继续对其进行分解;反之,如果发现某些相临的状态均过于简单,也可以对它们进行合并。例如,你本来计划晚上花一个小时做语文作业、一个小时做数学作业、一个小时做英语作业,可是今天数学老师发了两套真题作为作业,而语文老师和英语老师都仅留了几道简单的问答题作为作业,那么你显然需要调整你的计划,调整后的情况大致如此——花一个小时的时间做完文科的作业,花一个小时的时间做完数学真题A套,再花一个小时的时间做完数学真题B套。

由此可见,按照复杂度的状态抽象是对前两种状态抽象思路很好的补充。

引用:https://blog.51cto.com/u_15338162/5148972

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值