欢迎访问我司网站!我们是低阻值电阻产品解决方案提供商,

首页

C语言状态机编程思路

C语言状态机编程思路

有限状态机的概念有限状态机是一个概念性概念,它将复杂的控制逻辑分解为有限数量的稳定状态,以形成一个闭环系统。

由事件触发,状态机按设置的顺序处理事务。

单片机C语言的状态机编程使用条件选择语句(switch,case或if,else)来切换状态,并通过更改状态机的状态,以设置的顺序执行程序。

有限状态机由有限状态和彼此之间的过渡组成,并且在任何时候都只能处于给定数量的状态之一。

当接收到输入事件时,状态机将产生输出,还可能伴随状态转换。

状态机的原理如下:在当前状态下,事件发生后,它将移至下一个状态,然后确定要执行的功能动作。

请参考以下示意图:应用示例要使用状态机思想进行编程,需要将任务分解为有限数量的稳定状态。

这是一个常见的按钮动作示例:上图是一个典型的按钮动作图,可以分为四个状态:状态1 =向上按钮,状态2 =前沿抖动,状态3 =按下按钮,状态4 =后缘抖动。

有限状态机的C代码实现如下:if(timer> = 10ms)/// 10ms是典型的防抖时间{switch(button state){case button pop-up state:if(IO read as低电平)按钮状态=边界抖动;休息;情况边界抖动状态:如果(IO读为低电平)按钮状态=按下按钮;休息; case按钮按下状态:如果(IO读为高电平)按钮状态=边缘抖动后;休息; case后沿抖动状态:如果(IO读为高电平),则按钮状态=按钮向上;休息;默认值:按钮状态=按钮向上;状态机编程建议巧妙地使用结构一方面,枚举可以促进状态机的状态和事件的扩展和维护,另一方面,它可以提高程序的可读性。

假设有3个状态(状态数量可以随意增加),则状态的枚举如下:typedef enum {state_1 = 1,state_2,state_3} State;假设有5个事件(也可以随意添加),则事件的枚举如下:typedef枚举{Event_1 = 1,event_2,event_3,event_4,event_5} Event;定义一个描述如下的结构:typedef struct {State curState;}当前状态Event eventId;}}}}}}}}}}}} / / Events STATE NEXT STATE; / Action函数} StateEvent;根据具体应用场景调整状态和事件,并分配相应的动作功能。

总体基本流程如下:当前状态->初始状态。

事件已触发->跳至下一个状态->具体动作功能的总结状态机被广泛使用,逻辑思维也可以被运用。

LoRa消息推送还经常采用状态机的思想。

实际上,状态机涉及很多知识点。

本文仅简要介绍单片机C语言的状态机编程思想。

,在未来的开发和设计中,有必要不断总结经验并灵活运用。

来源:左侧为Headline-Embedded,右侧为C语言链接:https://www.toutiao.com/i6843028812112855855/版权属于原始作者。

如果有任何侵权,请联系以将其删除。

免责声明:本文内容经21ic授权后发布,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,并不代表该平台的立场。

如有任何疑问,请与我们联系,谢谢!