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

    状态机编程实例-状态表

    本篇,继续介绍状态机编程的第二种方法:状态表,来实现炸弹拆除小游戏的状态机编程。 1 状态表 状态表,顾名思义,就是通过一个状态表,来实现状态机中的状态转换,下面就先介绍下状态表的基础知识。 2 状态表的实现 上面介绍了状态表的基础知识,下面就来通过代码来介绍状态表的具体实现。 2.1 通用状态表事件处理器 上面说到,状态表可以使用一个非常有规律的状态表数据结构来表现一个状态机,因而在程序设计时,可以编写一个通用的状态表事件处理器。 ) { StateTable_dispatch((StateTable *)&l_bomb, e); /* dispatch the event */ } } } 3 总结 本编介绍了状态机编程的第2种方法——状态表,通过一个非常有规律的二维表数据结构,以及函数指针,实现炸弹拆除小游戏中的状态机功能。

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

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

    1 状态机实例介绍 1.1 炸弹拆除游戏 如下是一个自制的炸弹拆除小游戏的硬件实物,由3个按键: UP键:用于游戏开始前设置增加倒计时时间;用于游戏开始后,输入拆除密码“1” DOWN键:用于游戏开始前设置减小倒计时时间 键设置此次游戏的超时时间;通过ARM键开始游戏 倒计时状态 (TIMING_STATE):游戏开始后,通过UP和DOWN键输入密码,UP代表1,DOWN代表0;通过ARM键确认拆除 对于事件(或称信号),有3个按键事件 = 0; } Bomb1_dispatch(&l_bomb, (Event *)&tick_evt); /*调度处理tick事件*/ //省略... } 2 switch-case嵌套 本篇先使用最简单最容易理解的switch-case方法,来实现状态机编程。 2.1 状态机处理 使用switch-case实现状态机,一般需要两层switch结构。 测试 本例程,使用Arduino作为控制器进行测试,外接3个独立按键和一个IIC接口的OLED显示屏。

    90740编辑于 2023-08-22
  • 来自专栏嵌入式开发圈

    表驱动+状态机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
  • 来自专栏裸机思维

    从零开始的状态机漫谈(3)——状态机设计原则:清晰!清晰!还是清晰!

    回顾下之前介绍的内容: 《从零开始的状态机漫谈(1)——万物之始的语言》一方面介绍了状态机在计算机科学中的核心地位,另一方面着重介绍了一种嵌入式环境下容易使用的状态机图例; 《从零开始的状态机漫谈(2 增加了白盒分析的难度 几何状的增加了单一一个状态所拥有的跃迁的数量 回头再看前面的例子,很容易发现,它违反了状态功能单一原则:将字符输出和判断字符串尾部的功能集成进了同一个状态,从而产生了一个拥有3条跃迁的超级状态 ---- 尽管有的小伙伴会说:“这个状态机看起来好蠢啊”,“这个状态机看起来一点通用性都没有”,但我要说,领会下精神啦,这只是我用来介绍方法论的例子,实际应用当然不会这么设计,但不管怎么说,这个状态机很清晰有木有 switch状态机时,增加了太多不必要的状态切换,从而影响了当前状态机的执行效率。 比如: 这里,每次成功阅读到一个字符后,在翻译成switch状态机后,居然要到下一次才能对字符进行判断,而判断后居然又要退出状态机,再下一次才能开始新的一轮字符读取——这个状态机也实在太“卑微”了。

    12.1K22发布于 2021-03-10
  • 来自专栏互联网数据官iCDO

    运营研究的3个方法:过程、要素、分类

    一、过程 1. 过程的概念 我们可以从文字猜测过程一定与这些关键词相关:先后逻辑、趋势、流失。 字典上对过程是这么解释的:事物发展所经过的程序。 生命周期分析 这是典型的生命周期四个阶段,同样也有很典型的”过程性“。 每个过程的用户、产品都有不同的特点,我们可以做针对性的策略运营。 具体应用,这里不做赘述,亦不是本文的重点。 3. 具体模型的应用不是本文的重点,只做简单举例用,下面让我们来讨论一下要素。 二、 要素 1. 要素的概念 还记得我是怎么描述过程的吗? 几个常用的分类运营模型 2.1. 二分(矩阵法) 二分(矩阵法)的研究方法在各个领域都很普遍,比如我们常听说的波士顿矩阵、SWOT分析。 金字塔分析 金字塔分析不少人应该都用过,它可以按照事件的重要性和前后逻辑进行分类总结。

    1.3K70发布于 2018-04-17
  • 来自专栏机器学习入门

    4.6树上的分治3

    挑战程序竞赛系列(60):4.6树上的分治3) 思路: 在POJ: 1741的计数函数上加个循环,只需将“不超过k”改为“不超过k减去小于k”,就可以得到“等于k”的数量了。 new Main().run(); } static final int MAX_N = 11111 + 16; static final int INF = 0x3f3f3f3f

    49850发布于 2019-05-26
  • 来自专栏lonelydawn的前端猿区

    状态机

    这篇文章并不刻意介绍状态机的学术概念,只想谈谈状态机的实际运用。如果想看系统性的学术介绍的话,可以查看百度百科。 百度百科:状态机 应用场景 同学们在工作中,有没有遇到过类似这样的代码。 状态机模式就是用于处理这样一种复杂的逻辑判断结构的设计模式。 结构分析 在实现状态机时: 一个条件分支可以认为是一种状态(state)。 为了提高性能,我们希望用户进入该屏时,再播放该屏的动画,此时就可以使用状态机来实现这一场景。 MovieActionState2 { constructor () {} update () { // Action: 第二屏动画 } } class MovieActionState3 = new MovieActionState3() this.nowState = this.actionState1 } run (context) { let ctx = context

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

    状态机

    1)相关状态初始化,比如:STATE1, STATE2, STATE3, STATE4 2)相关事件:比如:EVENT1, EVENT2, EVENT3, EVENT4, INTERNAL_EVENT 3)状态节点上下文:context,主要包括状态节点类型、状态节点 构建状态节点分支相关接口信息: From 从哪个状态节点开始 To 需要到的目标状态节点 When 定义过渡期间要执行的操作 perform Condition 满足条件时,可以从from到to状态节点 因此可以想到我们需要构建状态机的构建器必然需要: StateMachineBuilder 状态机构建器 数据结构:状态、事件 方便构建对应的 : 构建状态机 注册状态机 展示状态机 展示状态机uml 节点操作: 基于node的数据结构进行构建,配合使用from、to、condtion、link with设置对应的布局 使用状态的步骤: 创建 三、展示状态机信息效果 总体来说cola的状态机还是蛮实用的。 基于cola的状态机还可以实现复杂的状态-事件流转。如下图所示: 四、状态机的使用场景 审批流程、订单状态流转等。

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

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

    那么凭借什么编译状态机的状态呢?答案是余数! 通过上面的分析可以发现,余数的三种情况可以作为状态机的三种状态,当前的状态以及输出只跟之前的状态和当前的输入有关,因此可以使用Mearly型状态机描述。 图片 根据状态转移图写出对应的verilog代码2.2 verilog代码 //使用状态机设计模三序列检测器 module sequence_modulus3_detector( input = 4'b1000; //定义两个寄存器表示状态机的当前状态和下一状态 reg [3:0] curr_state; reg [3:0] next_state; //第一段使用时序逻辑描述状态转移 always ,输出mod3等于1; 输入序列11111,十进制为31,无法被3整除,输出mod3等于0; 输入序列111110,十进制为62,无法被3整除,输出mod3等于0; 三、总结 模三检测器主要设计思路是围绕状态机进行设计 首先,它作为判断输出是否为“1”的依据;其次,它也是连接状态机的枢纽,状态机的状态是根据当前余数的值进行编译的。

    5.2K30编辑于 2023-05-18
  • 来自专栏机器学习入门

    算法细节系列(3):梯度下降法,牛顿,拟牛顿

    算法细节系列(3):梯度下降法,牛顿,拟牛顿 迭代算法原型 话不多说,直接进入主题。 不动点迭代主要用于求解函数的零点。如求以下函数的零点, f(x)=x3−x−1 f(x) = x^3 - x -1 该怎么做? 那求f(x)=x3−logx−1f(x) = x^3 - \log x -1的零点呢?貌似就难求了,没关系,不动点迭代就是用来求解这些超越方程的,或者说可以用计算的方法,不断迭代逼近正确值。 上述内容摘自博文用Python实现牛顿求极值。 拟牛顿 摘自博文牛顿与拟牛顿法学习笔记(二)拟牛顿条件 ? 参考文献 最优化问题中,牛顿为什么比梯度下降法求解需要的迭代次数更少? 用Python实现牛顿求极值。 牛顿与拟牛顿法学习笔记(二)拟牛顿条件

    3K10发布于 2019-05-26
  • 来自专栏算法之名

    Spring状态机

    有限状态机简称就是状态机,因为一般的状态机的状态都是离散和可举的,即为有限,所以后面的介绍都不加有限二字。状态机表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 通俗的描述状态机就是定义了一套状态変更的流程:状态机包含一个状态集合,定义当状态机处于某一个状态的时候它所能接收的事件以及可执行的行为,执行完成后,状态机所处的状态。 所以状态机会包含以下几个重要的元素: State:状态。一个标准的状态机最少包含两个状态:初始和终态。初态是状态机初始化后所处的状态,而终态顾名思义就是状态机结束时所处的状态。 标准的状态机还会涉及到一些中间态,存在中间态的状态机流程就会比较复杂(用处也不是特别大,而且可以通过其他方式实现),所以在目标实现的状态机里不会引入这个概念。 Event:事件。 还有中描述叫Trigger,表达的意思都一样,就是要执行某个操作的触发器或口令:当状态机处于某个状态时,只有外界告诉状态机要干什么事情的时候,状态机才会去执行具体的行为,来完成外界想要它完成的操作。

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

    (有限)状态机

    基础 状态机是最基本的设计模式。 而我们常常说的状态机指有限状态机,缩写是FSM(Finite State Machine)。 无限状态机仅仅是理论上存在的概念,比如,把1/3变成一个状态机的话,那这个状态就是无限循环了,实际上没啥实际的应用意义。 我们常说的状态机指有限状态机。 不夸张的说,状态机模型是世界运行的基础,大脑做的决策推演,在火星上运行的祝融号,计算机软件的底层设计,游戏中的沙雕AI,其底层逻辑都是状态机。 有限状态机的定义:有限个状态及在这些状态之间的转移和动作等行为的数学模型;在计算机科学中,状态机的关键要素是状态和状态的转移。 回到程序设计的话题,要设计一个通用的状态机程序,只用switch,case肯定是不够的; 当然,不管是用哪种语言,只要把握住状态机的三个核心要素即可,即: 状态(state ):当前处于哪种状态

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

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

    4.8K00编辑于 2024-10-11
  • 来自专栏C/C++与音视频

    排序算法3----插入

    插入的本质: 后面数j与前面数比较,然后找出最小的数,然后暂存,然后移位,然后插入。 类似于一个人来到一个队伍中,进行插队的场景,故美其名曰为插入

    40050编辑于 2022-06-14
  • 来自专栏程序人生

    谈谈状态机

    在谈论一般意义的状态机时,我们先看看有限状态机,Finite State Machine,简称 FSM。 请听题:写一个状态机,验证一串二进制bit,包含偶数个 0 和奇数个 1。 我们很容易能画出这样的状态机: ? 手起刀落,马到功成。简单地有点侮辱你的智商。 来个难的吧 —— 难到那种可能你抓破头皮喊破喉咙也找不到优雅的解法的问题。 如果第一个输入是 1,那么它不能被 3 整除。商 0 余 1。一个数能不能被整除,关键看余数是否为 0。除了 0 之外,这里余数可能的取值还有 1 和 2。 所以第二个输入是 0 时,余数 (1 * 2) % 3 = 2,状态从 1 迁移到 2。

    1.7K70发布于 2018-03-29
  • 来自专栏码农爱学习的专栏

    STM32按键状态机3——增加双击与功能优化

    上篇文章:STM32按键状态机2——状态简化与增加长按功能,介绍了将按键检测增加长按功能,并将按下抖动与松开抖动共用一个抖动状态来表示,其状态图如下: 仔细研究这个状态图,其它还存在一些问题: 短按状态 (主函数代码如下),仅用做演示按键状态机的运行机制。 "); while(1) { } } //定时器3中断服务程序 void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3 = RESET) //检查TIM3更新中断发生与否 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 KEY_EVENT 总结 本篇在前两篇按键状态机的基础上,继续介绍增加按键的双击功能,并解决之前状态存在的两个问题,通过实测验证,演示短按、长按、双击的使用效果。

    1.8K10编辑于 2022-10-04
  • 来自专栏后端开发随笔

    状态机入门实践

    stateMachine.sendEvent(Mono.just(messageE2)).blockLast(); Message<String> messageE3 = MessageBuilder.withPayload("E3").build(); stateMachine.sendEvent(Mono.just(messageE3)).blockLast SF -- 状态机从S2状态转换到SF状态 Cola状态机 Cola状态机的使用和配置比Spring StateMachine简单直接,以电商场景的订单状态转换为例进行阐述。 【参考】 什么是状态机?一篇文章就够了 状态机的介绍和使用 状态机的技术选型看这篇就够了,最后一个直叫好!!! 全网首发:Seata Saga状态机设计器实战 如何将Saga建模为状态机 保姆式教程!如何使用Cola-statemachine构建高可靠性的状态机

    62510编辑于 2024-03-30
  • 来自专栏二猫の家

    3.算法设计与分析__分治

    分治目录 1 概 述 1.1 分治的设计思想 启发式规则 1.2 分治的求解过程 2 递 归 2.1 递归的定义 *递归函数的经典问题——汉诺塔问题* 2.2 递归函数的运行轨迹 2.3 递归函数的内部执行过程 3 排序问题中的分治 3.1 归并排序 二路归并排序的分治策略是 3.2 快速排序 **快速排序的分治策略是** 4 组合问题中的分治 4.1 最大子段和问题 最大子段和问题的分治策略是: 4.2 独立子问题:各子问题之间相互独立,这涉及到分治的效率,如果各子问题不是独立的,则分治需要重复地解公共的子问题。 3 排序问题中的分治 3.1 归并排序 二路归并排序的分治策略是 (1)划分:将待排序序列r1, r2, …, rn划分为两个长度相等的子序列r1, …, rn/2和rn/2+1, …, rn; ( p3=(x3, y3)位于直线p1p2的左侧时,该式的符号为正。

    1.2K21编辑于 2022-11-30
  • 来自专栏TechBlog

    状态机设计举例

    2.ASM图中各种逻辑框之间的时间关系 3.十字路口交通灯控制电路设计举例 状态机设计准则 FSM输出方法 有限状态机HDL描述规则 可靠性与容错性 汽车尾灯控制电路设计 重点介绍构造状态图的两种方法: 一是试探,二是基于算法状态机构造状态图的方法。 例 (试探)汽车尾灯发出的信号主要是给后面行驶汽车的司机看的,通常汽车驾驶室有刹车开关(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表示。

    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()函数。函数很长,看着比较吓人。。。 while循环和其中的那个大switch语句,删减之后如下: 1 int connection_state_machine(server * srv, connection * con) 2 { 3

    89110发布于 2018-09-19
领券