首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏码农爱学习的专栏

    状态机编程实例-状态表

    本篇,继续介绍状态机编程的第二种方法:状态表,来实现炸弹拆除小游戏的状态机编程。 1 状态表 状态表,顾名思义,就是通过一个状态表,来实现状态机中的状态转换,下面就先介绍下状态表的基础知识。 = 0),即每过一秒且倒计时未减到0时,才进行状态转换至“倒计时状态” 1.2 事件处理器 由于状态表可以使用一个非常有规律的数据结构(状态表)来表现一个状态机,因此编程时可以编写一个通用的“事件处理器 2 状态表的实现 上面介绍了状态表的基础知识,下面就来通过代码来介绍状态表的具体实现。 2.1 通用状态表事件处理器 上面说到,状态表可以使用一个非常有规律的状态表数据结构来表现一个状态机,因而在程序设计时,可以编写一个通用的状态表事件处理器。 2种方法——状态表,通过一个非常有规律的二维表数据结构,以及函数指针,实现炸弹拆除小游戏中的状态机功能。

    74751编辑于 2023-08-22
  • 来自专栏码农爱学习的专栏

    状态机编程实例-嵌套switch-case

    嵌入式软件开发中,状态机编程是一个比较实用的代码实现方式,特别适用于事件驱动的系统。 本篇,以一个炸弹拆除的小游戏为例,介绍状态机编程的思路。 = 0; } Bomb1_dispatch(&l_bomb, (Event *)&tick_evt); /*调度处理tick事件*/ //省略... } 2 switch-case嵌套 本篇先使用最简单最容易理解的switch-case方法,来实现状态机编程。 2.1 状态机处理 使用switch-case实现状态机,一般需要两层switch结构。 运行状态机的本质,就是周期性的调用状态机(上面实现的两层switch-case),当有事件触发时,设置对应的事件,状态机在运行时,即可处理对应的事件,从而实现状态的切换,或是其它的逻辑处理。 演示视频: 4 总结 本篇以一个炸弹拆除的小游戏为例,介绍了嵌入式软件开发中,状态机编程的思路: 分析系统需要哪几种状态,哪几种事件 定义这些状态、事件,以及状态机的数据结构 使用UML建模,设计对应的状态图

    90740编辑于 2023-08-22
  • 来自专栏TechBlog

    FPGA实验4有限状态机设计

    由设计要求可知:汽车左转弯时,右边的灯不亮而左边的灯依次循环点亮,即0个、1个、2个或3个灯亮,分别用L、L、L、L表示,状态机4个状态中循环。 同理,汽车右转弯时,状态机也会在4个状态中循环,即左边灯不亮而右边的灯有0个、1个、2个或3个灯亮,分别用R、R、R、R,表示。由于L和R,都表示6个灯不亮,所以合起来用IDLE表示。 有限状态机共stopon1,dooropen,doorclose,wait1, wait2, wait3, wait4, up, down, stop十个状态,分别对应停在一楼、开门、关门、等待(共4s 也帮助我捋清了状态机的设计步骤,即: 1)依据具体的设计原则,确定采用Moore状态机还是Mealy状态机。 2)分析设计要求列出状态机的所有状态,并对每一个状态进行状态编码 3)根据状态转移关系和输出函数画出状态图。 4)根据所画的状态图,采用硬件描述语言对状态机进行描述。

    88320编辑于 2022-07-20
  • 来自专栏嵌入式开发圈

    表驱动+状态机AD传感器驱动检测框架

    接上前面两篇文章: 基于事件型表驱动菜单框架之小熊派简易气体探测器实战项目开发(上) 基于事件型表驱动菜单框架之小熊派简易气体探测器实战项目开发(中) 今天这篇文章不作为气体探测器实战项目的最后一节 于是就有了表驱动+状态机传感器驱动检测框架的诞生。 1、核心传感器检测框架 上面那个写得很长的传感器检测流程,其实说白了就是两部分: 1、当前到底是对应哪个传感器检测流程(状态机)? 接下来我们还需要一个传感器的检测业务结构,用于实现检测流程切换(状态机)以及一些其它的逻辑操作,这里提供了一个Sensor_Cursor的数据结构。 uint8_t sensor_detect_step ; /*传感器检测流程处理*/ sensor_handler handler_func ; } sensor_frame; /*传感器状态机 } } 满足通过基准的条件,此时在该函数里写了这么一句代码: Sensor_Flow_Cursor.Detect_Step = DETECTING_STEP ; 这一句代码就是检测流程的切换(状态机

    1.1K32发布于 2020-11-02
  • 来自专栏WD学习记录

    机器学习 学习笔记(4)牛顿 拟牛顿

    4)计算 ? ,并求 ? : ? (5)置 ? (6)置k=k+1,转(2) 拟牛顿 牛顿计算海塞矩阵的逆矩阵开销太多,拟牛顿用一个近似的矩阵代替海塞矩阵的逆矩阵。 ? 满足条件 ? 记 ? (4)一维搜索:求 ? 使得 ? (5)置 ? (6)计算 ? ,若 ? ,则停止计算,的近似解 ? ,否则,按照 ? 计算 ? (4)一维搜索,求 ? 使得 ? (5)置 ? (6)计算 ? ,若 ? ,则停止计算,的近似解 ? ,否则,按照 ? 计算 ? (7)置k=k+1,转(3) 关于牛顿和梯度下降法的效率对比:   从本质上去看,牛顿是二阶收敛,梯度下降是一阶收敛,所以牛顿就更快。 参考: 《机器学习》 《统计学习方法》 常见的几种最优化方法(梯度下降法、牛顿、拟牛顿、共轭梯度等)

    1.9K10发布于 2018-09-03
  • 来自专栏裸机思维

    从零开始的状态机漫谈(4)——多实例

    如果你已经熟悉了我前面介绍的翻译规则,很容易就会发现这里存在的巨大问题:是的,这个状态图按照switch翻译无脑翻译的后果,将是一个根本无法正常工作的状态机: #include <stdint.h> 【多实例的状态机】 ---- 所谓多实例的状态机,就是指那些同一时刻可以安全存在多个运行实例的状态机——本质上每个实例都是一个任务——以多任务的眼光去看待状态机的多实例问题,格局就宽阔了起来。 具体来说,就是: 为状态机定义一个控制块; 在控制块里存放状态变量; 在控制块里存放状态机的上下文; 建立状态机实例时,首先要建立一个控制块,并对其进行必要的初始化; 在随后调用状态机时,应该首先传递状态机的控制块给状态机函数 状态图中通过 "this.xxxx" 的方式来访问状态机上下文中的内容。 【基本的翻译方法】 ---- 一般来说,无论采用何种状态机翻译方式,可重入的状态机一定会包含一个控制块。 我们为每一个状态机都引入了一个控制块,从面向对象开发的视角来看,本质上是将状态机都以类的形式进行了改造,这里: 控制块的定义就是状态机的类(Class)定义; 状态机函数是类的方法(Method);

    1.8K21发布于 2021-10-12
  • 来自专栏学弱猹的精品小屋

    数值优化(4)——非线性共轭梯度,信赖域

    目录 线性共轭梯度的具体实现 非线性共轭梯度 预条件方法 信赖域方法 柯西点 柯西点的全局收敛性 Source J. Nocedal, S. J. 线性共轭梯度的具体实现 我们在上一节介绍了线性共轭梯度可以带来的几个性质,我们放在这里再给大家复习一下。 Theorem 1: 设线性共轭梯度的第 步迭代的结果 不是解,那么有以下结论成立 (1) (2) (3) (4) 具体的来说,我们的算法构造可以写成这样的一个形式 ? 同理也可以解释我们的第4步和第5步,在线性共轭梯度中,它的目标是为了解 ,使得 尽可能的小。但是本质上,其实就是为了使得优化时梯度可以尽量的趋于0,这也符合我们对优化算法的要求。 好的,这一节就到这里,关于信赖域还剩下一点内容,我们到之后再说。 小结 本节主要介绍了非线性共轭梯度和信赖域

    1.5K20发布于 2021-08-09
  • 来自专栏DolphinScheduler

    4 篇|状态机:调度系统真正的灵魂

    这就是状态机思想:执行逻辑不依赖内存,而依赖可持久化的状态流转。 WorkflowInstance:聚合状态机如果说TaskInstance是原子状态机,那么WorkflowInstance是聚合状态机。 DolphinScheduler状态机的工作原理从整体架构看,DolphinScheduler的状态机运行机制可以抽象为三层协作:数据库、Master、Worker。 状态机如何保障可靠性状态机设计为调度系统带来四个核心能力:幂等性、可恢复性、最终一致性与可观测性。幂等性通过状态检查实现,任何已完成任务不会重复执行。 状态机设计一旦出现漏洞,就会导致重复执行、丢失执行、状态紊乱或死锁。结语在ApacheDolphinScheduler中,可靠性并不是某个模块的特性,而是整个系统围绕状态机展开的结果。

    12310编辑于 2026-03-05
  • 来自专栏C/C++与音视频

    排序算法4--快速排序

    快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据变为有序为止。

    32020编辑于 2022-06-14
  • 来自专栏lonelydawn的前端猿区

    状态机

    这篇文章并不刻意介绍状态机的学术概念,只想谈谈状态机的实际运用。如果想看系统性的学术介绍的话,可以查看百度百科。 百度百科:状态机 应用场景 同学们在工作中,有没有遇到过类似这样的代码。 状态机模式就是用于处理这样一种复杂的逻辑判断结构的设计模式。 结构分析 在实现状态机时: 一个条件分支可以认为是一种状态(state)。 以上也就是状态机的四大概念:state、event、action、transition。 用法示例 假如业务想要做一个下滑翻屏的 Swiper 页面,每一屏都有不同的内容和动画。 为了提高性能,我们希望用户进入该屏时,再播放该屏的动画,此时就可以使用状态机来实现这一场景。 slideChange () { movie.toggleState(this.activeIndex) } } }) 假如此时业务需要再加一屏动画,那么可以创建并实例化一个 MovieActionState4

    84020发布于 2021-09-26
  • 来自专栏后端技术学习

    状态机

    目前COLA已经发展到COLA v4。 一、如何实现一个状态机? 首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点? 1)相关状态初始化,比如:STATE1, STATE2, STATE3, STATE4 2)相关事件:比如:EVENT1, EVENT2, EVENT3, EVENT4, INTERNAL_EVENT : 构建状态机 注册状态机 展示状态机 展示状态机uml 节点操作: 基于node的数据结构进行构建,配合使用from、to、condtion、link with设置对应的布局 使用状态的步骤: 创建 操作,fire的过程中拿到下一个状态节点setNextState(source,request) 二、状态机信息流程 可以参考COLA里面的test,可以看到COLA的具体代码实现。 三、展示状态机信息效果 总体来说cola的状态机还是蛮实用的。 基于cola的状态机还可以实现复杂的状态-事件流转。如下图所示: 四、状态机的使用场景 审批流程、订单状态流转等。

    1.6K20编辑于 2023-02-28
  • 来自专栏数字IC经典电路设计

    序列模三检测器(状态机设计原理|verilog代码|Testbench|仿真结果)

    例如,即100到1001的过程(即十进制数4到9的过程):当前数据模三余数为1,在数据右端新增1bit数据1,最后会发现下一状态的余数变为0! 那么凭借什么编译状态机的状态呢?答案是余数! 通过上面的分析可以发现,余数的三种情况可以作为状态机的三种状态,当前的状态以及输出只跟之前的状态和当前的输入有关,因此可以使用Mearly型状态机描述。 b0001; parameter S1 = 4'b0010; parameter S2 = 4'b0100; parameter S3 = 4'b1000; //定义两个寄存器表示状态机的当前状态和下一状态 ,弄清楚状态机的状态转移并且画出状态转移图有利于加深对模三检测器的理解。 首先,它作为判断输出是否为“1”的依据;其次,它也是连接状态机的枢纽,状态机的状态是根据当前余数的值进行编译的。

    5.2K30编辑于 2023-05-18
  • jvm入门4:09方

    09 方法区 栈、堆、方法区的交互关系 方法区的理解 方法区可看作独立于堆的内存空间 1方区域对一样,是各线程共享的内存区域;2在jvm启动时被创建,实际物理内存空间中和java堆区一样都是不连续的; 3大小可选择固定或扩展;4区的大小决定了可以保存多少类,方法区溢出,虚拟机会报内存溢出错误,outofmemoryerror:pergen space、metaspace,如加载大量的第三方jar包 (或void);3方参数的数量和类型(按顺序);4的修饰符(public,private,protected,static,final,synchronized,native,abstract的一个子集 );4的字节码(bytecodes)、操作数栈、局部变量表及大小(abstract和native方法除外);5异常表(native和asbtract除外),每个异常处理的开始位置,结束位置,代码处理在程序计数器中的偏移地址 4. **Survivor区设计及比例(如8:1:1)** 答:两个Survivor避免内存碎片,复制算法优化;比例基于对象朝生夕死假设。 5.

    38410编辑于 2025-02-25
  • 来自专栏算法之名

    Spring状态机

    有限状态机简称就是状态机,因为一般的状态机的状态都是离散和可举的,即为有限,所以后面的介绍都不加有限二字。状态机表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 通俗的描述状态机就是定义了一套状态変更的流程:状态机包含一个状态集合,定义当状态机处于某一个状态的时候它所能接收的事件以及可执行的行为,执行完成后,状态机所处的状态。 所以状态机会包含以下几个重要的元素: State:状态。一个标准的状态机最少包含两个状态:初始和终态。初态是状态机初始化后所处的状态,而终态顾名思义就是状态机结束时所处的状态。 标准的状态机还会涉及到一些中间态,存在中间态的状态机流程就会比较复杂(用处也不是特别大,而且可以通过其他方式实现),所以在目标实现的状态机里不会引入这个概念。 Event:事件。 bean @Configuration @EnableStateMachine @Slf4j public class StateMachineConfig extends EnumStateMachineConfigurerAdapter

    2.1K30发布于 2020-06-02
  • 来自专栏趣Python

    (有限)状态机

    基础 状态机是最基本的设计模式。 而我们常常说的状态机指有限状态机,缩写是FSM(Finite State Machine)。 无限状态机仅仅是理论上存在的概念,比如,把1/3变成一个状态机的话,那这个状态就是无限循环了,实际上没啥实际的应用意义。 我们常说的状态机指有限状态机。 不夸张的说,状态机模型是世界运行的基础,大脑做的决策推演,在火星上运行的祝融号,计算机软件的底层设计,游戏中的沙雕AI,其底层逻辑都是状态机。 有限状态机的定义:有限个状态及在这些状态之间的转移和动作等行为的数学模型;在计算机科学中,状态机的关键要素是状态和状态的转移。 状态转移表,示例是一个输入4个数字密码(9527)的状态转移表: state_machine_form password_states[] = { {STATE_NONE, EVENT_INPUT_9

    2.8K20发布于 2021-09-10
  • ASIO 状态机

    ASIO状态机的工作原理ASIO状态机通过定义一系列的状态和状态转换来管理音频流的生命周期。 状态机的实现需要处理以下几个关键方面:状态转换:状态机需要能够根据外部事件(如用户输入、硬件中断等)在不同状态之间转换。事件处理:状态机需要能够响应和处理各种事件,如缓冲区溢出、硬件故障等。 ASIO状态机在音频处理中的应用在音频处理中,ASIO状态机的应用主要体现在以下几个方面:实时音频处理:ASIO状态机确保音频数据的实时处理,满足专业音频应用对低延迟的要求。 音频流的控制:通过状态机的管理,可以精确控制音频流的开始、停止和暂停等操作。错误恢复:在发生错误时,ASIO状态机可以快速响应并尝试恢复音频流,减少对用户体验的影响。4. ASIO状态机的优化为了提高ASIO状态机的性能和稳定性,可以采取以下优化措施:减少状态转换:尽量减少不必要的状态转换,以降低状态机的复杂性和延迟。

    4.8K00编辑于 2024-10-11
  • 来自专栏程序人生

    谈谈状态机

    在谈论一般意义的状态机时,我们先看看有限状态机,Finite State Machine,简称 FSM。 请听题:写一个状态机,验证一串二进制bit,包含偶数个 0 和奇数个 1。 我们很容易能画出这样的状态机: ? 手起刀落,马到功成。简单地有点侮辱你的智商。 来个难的吧 —— 难到那种可能你抓破头皮喊破喉咙也找不到优雅的解法的问题。 要是判断能不能被 16 整除,这么做下来,一页 A4 纸恐怕都不够画状态变迁的。 还有没有其他方法?肯定有。 \5\4\3\2\1 大家猜猜是干嘛的。 这样的 regex,处理起来是非常麻烦的,要能够停止,回溯,还要有额外的空间记录已经捕获的组。处理这样的已经超出了 regex 范畴的产品是:pcre。

    1.7K70发布于 2018-03-29
  • 来自专栏后端开发随笔

    状态机入门实践

    "arg1"); sample.perform("arg2"); sample.perform("arg3"); sample.perform("arg4" } } 输出: 员工提交申请,同步流转到部门经理申请,参数:arg1 部门经理审批完成,同步流转到HR审批,参数:arg2 HR审批通过,流转到结束组件,参数:arg3 流程结束,参数:arg4 , 1), WAITING_FOR_RECEIVED("待接单", 2), WAITING_DELIVERY("待发货", 3), PART_DELIVERY("部分发货", 4) OrderEvent { CREATE_ORDER(1, "创建订单"), REPAY(2, "支付"), CANCEL_ORDER(3, "取消订单"), TAKE_ORDER(4, 【参考】 什么是状态机?一篇文章就够了 状态机的介绍和使用 状态机的技术选型看这篇就够了,最后一个直叫好!!!

    62510编辑于 2024-03-30
  • 来自专栏TechBlog

    状态机设计举例

    一是试探,二是基于算法状态机构造状态图的方法。 例 (试探)汽车尾灯发出的信号主要是给后面行驶汽车的司机看的,通常汽车驾驶室有刹车开关(HAZ)、左转弯开关(LEFT)和右转弯开关(RIGHT),司机通过操作这3个开关给出车辆的行驶状态。 由设计要求可知:汽车左转弯时,右边的灯不亮而左边的灯依次循环点亮,即0个、1个、2个或3个灯亮,分别用L0、L1、L2、L3表示,状态机4个状态中循环。 同理,汽车右转弯时,状态机也会在4个状态中循环,即左边灯不亮而右边的灯有0个、1个、2个或3个灯亮,分别用R0、R1、R2、R3表示。由于L0和R0都表示6个灯不亮,所以合起来用IDLE表示。 (4)用Verilog HDL描述交通灯控制电路 根据以上设计思路,可以写出交通灯控制电路的Verilog HDL代码如下: //--------------- controller.v -------

    1.4K30编辑于 2023-02-13
  • 来自专栏用户2442861的专栏

    Lighttpd1.4.20源码分析之状态机(1)---状态机总览

    状态机可以说是lighttpd最核心的部分。lighttpd将一个连接在不同的时刻分成不同的状态,状态机则根据连接当前的状态,决定要对连接进行的处理以及下一步要进入的状态。 下面这幅图描述了lighttpd的状态机: ? 图中的各个状态对应于下面的一个枚举类型: 1 typedef enum 2 { 3 CON_STATE_CONNECT, //connect 连接开始 4   下面先来说一说整个状态机的核心函数───connections.c/ connection_state_machine()函数。函数很长,看着比较吓人。。。 删减之后如下: 1 int connection_state_machine(server * srv, connection * con) 2 { 3 int done = 0, r; 4

    89110发布于 2018-09-19
领券