首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从零开始的状态机漫谈(2)——switch:你的状态机初恋

——这里的“简化”是相对UML状态图的“繁杂”而言、且更接近课本上所使用的状态机图例;而这里的“实用”体现在:基于这套方法绘制的状态图是可以“无脑”而“严格”的翻译成C语言代码的。...fsm_rt_cpl = 1,} fsm_rt_t; 至此,我们完成了一个状态机返回值的定义过程,并隐含了以下的规则: 对于“确定”不会返回错误码的状态机函数来说,状态机函数的使用与bool...量是兼容的; 用户可以使用负数来“自定义”错误码,并使用(-1)表示“不问缘由的默认错误码”; ---- 需要特别强调的是,错误码表示发生了“状态机发生了预期之外、无法继续正常工作的情况”,比如,状态机函数需要一个指针...在图中,不光矩形框内部多了一个名为 timeout 的黑色小圆点;在矩形框的外部(右侧)也出现了一个对应的扇出箭头,同样也标记了 timeout——这实际上是告诉我们,当状态机迁移到 timeout 终点时...另外一个“START不能被当做状态来使用”的原因是,start作为一个跃迁条件,它是可以拥有“发生跃迁时执行且只执行一次的动作的”——又由于START是处于复位状态的状态机第一次执行时的起点,因此START

1.9K11

【低代码】基于洋葱圈模型的逻辑编排在UI低代码编辑器上的落地实践

活动参与用户:用户打开的活动页面中引入了 runtime-sdk、逻辑图、编译后的逻辑代码,在页面初始化后,若 UI 组件绑定的事件中使用了逻辑编排,会自动在前端编译,解析 DSL 生成逻辑上下文,当用户触发执行事件时...3.2 异步逻辑状态管理 — 基于洋葱圈模型管理 FSM 节点 如下图所示的逻辑图,使用 DSL 能够轻松描述并行(环)、串行、异步、分支等逻辑描述,而其中的难点,在于异步逻辑状态的管理。...3.2.1 异步逻辑节点 FSM 封装实现同步化 为了实现逻辑节点的复用及保障每个节点的状态可控,首先需要把包含异步逻辑代码的节点同步化,才能避免因时序问题引发的错误,最优雅的方式莫过于使用 Promise...当在节点属性面板中激活断点后,逻辑执行引擎会在初始化构建上下文 context 时收集断点,当执行到逻辑断点时不再链式执行下去,而是将 FSM 状态控制回调封装为新的 Promise 存储在 handle...3.5 AST 死循环检测 在客户端环境,常规的语法和逻辑错误在调试时可以直接由浏览器捕获csxiaoyao.com定位,而死循环会直接导致客户端卡死后崩溃,非常影响用户体验。

8410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    海量之道系列文章之弱联网优化 (五)

    ; 3) 【静态服务器IP列表】 预埋在客户端持久化存储中,其主要价值在于,当使用客户端遇到动态服务器列表和静态服务器域名列表访问都出现异常时,有最低限度的可用性保障。...; 接入调度FSM状态变迁的原则是: 1) 客户端首次使用时,接入调度FSM状态入口在静态服务器域名列表; 2) 客户端在冷启动(除首次使用)、热启动时,接入调度FSM...和服务器列表调度FSM发生状态变迁,使得下次再发起服务器访问时能使用更优的接入服务,接入链路切换时机这里有三个方案可供探讨(后续链路管理也会有相关的讨论): 1) 直接关闭当前链路,立即尝试使用新的动态服务器列表建立链接...; 2) 直接关闭当前链路,当有网络访问时尝试使用新的动态服务器列表建立链接; 3) 保持当前链路,立即尝试使用新的动态服务器列表建立链接,一旦成功,马上切换新的业务请求到新链路上...③ 网络可达性探测 在连接建立过程中如果出现连接失败的现象,而终端系统提供的网络状态接口反馈网络可用时,我们需要做网络可达性探测(即向预埋的URL或者IP地址发起连接尝试),以区别网络异常和接入服务异常的情况

    3.2K00

    数据结构与算法在前端领域的应用(主菜)

    我们以现实中广泛使用的有限状态机(以下简称 FSM)为例进行讲解 FSM 应用非常广泛, 比如正则表达式的引擎,编译器的词法和语法分析,网络协议,企业应用等很多领域都会用到。...实际业务中如果使用状态机来设计系统也可以进行可视化。类似这样子: ?...可以看出,我们这种方式逻辑清晰,且内存占用很少,不会出现溢出的情况。 正则是基于自动机实现的,那么使用正则匹配会是怎么样的呢?大家可以自己试一下。...相信你肯定能想出很多种方法来完成这样的需求,接下来我会用 FSM 来实现。 我们很容易画出整理的流程图: ?...对于答题部分则稍微有一点麻烦,但是如果你用状态机的思维去思考就很容易, 我们不难画出这样的图: ? JS 中有很多 FSM 的框架, 大家都可以直接拿过来使用。

    95230

    工作流引擎在有赞 DevOps 中的实践

    Opsflow-FSM 作为 Opsflow 的核心, 驱动工单往前推进, 例如, 当一个 "新建 ES 申请" 工单运行到 "ES 管理员审批" 状态时, Opsflow-FSM 通过持久化在 RDS...以前文的 "新建 ES 申请" 流程为例, 工单在 "ES 管理员审批" 节点时 Opsflow-Web 根据 Opsflow-FSM 给到的三个流转信息在前端渲染出相应的三个按钮, 审批人按下其中一个按钮之后...Worker 的实现使用分布式任务队列 Celery 队列堆积时可快速水平扩展。...流程图绘制 Opsflow-FSM 维护的有限状态机在数据结构上是 Directed acyclic graph (DAG), Opsflow 使用了非常优秀的基于 A Technique for Drawing...针对问题 1, 2, 3, 4, 9: Opsflow 提供了 GUI 界面对 FSM 进行管理, 流程管理员可以在页面上配置 FSM 中的节点和边的各种属性, 流程中不合理的地方可以通过实时呈现的流程图暴露出来

    1.2K10

    使用hashicorp Raft开发分布式服务

    使用hashicorp Raft开发高可用服务 开发raft时用到的比较主流的两个库是Etcd Raft 和hashicorp Raft,网上也有一些关于这两个库的讨论。...使用hashicorp/raft时应该将实现分为两层:一层是底层的Raft,支持Raft数据的存储、快照等,集群的选举和恢复等,这一部分由Raft模块自实现;另一层是应用层,需要由用户实现FSM接口,FSM...FSMSnapshot.Persist执行结束之后需要执行SnapshotSink.Close() ,如果出现错误,则执行SnapshotSink.Cancel() 。...-->fsm.Restore) 因此在正常情况下,Raft会不定期创建snapshot,且在创建Raft节点(新建或重启)的时候也会尝试通过snapshot来恢复FSM。...集群恢复 当集群中的节点少于仲裁数目时,集群将无法正常运作,此时可以手动调用如下接口尝试恢复集群,但这样会可能会导致原本正在复制的日志被commit。

    55620

    基于FPGA的有限状态机浅析

    下面是一个序列检测状态转移图,检测是的使1101这个序列,我们给这个序列的检测序列是11101 1101这一串数据。在这个序列检测器中,我们允许使用重复位。...在使用状态机来描述时序电路的时候,首先应该做的是画出状态转移图,然后根据状态跳转来描述代码,最后便会事半功倍。这段序列检测的代码我也贴出来。...我在设计的时候,尝试把第二段写成时序逻辑,最终结果并没有影响,时序逻辑随时钟变化,组合逻辑是直接赋值,所以在第三段状态机进行输出时,输出结果肯定是稳定的,但是这样会限制fmax。...把不会产生错误输出的竞争的现象称为非临界竞争。把产生暂时性的或永久性错误输出的竞争现象称为临界竞争。 冒险(risk)信号在器件内部通过连线和逻辑单元时,都有一定的延时。...信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险,所以在设计中我们要注意避免这个现象,最简单的避免方法是尽量使用时序逻辑同步输出

    1.4K80

    synplify | 基础操作

    SCOPE是管理设计约束与属性 图形化的分析和cross_probe工具HDL Analyst Synplify Pro还增加提供了FSM Explorer 可以在尝试不同的状态机优化方案后选定最佳结果...GUI界面操作 synplify & 添加源代码文件 约束文件等,Synplify把最后编译的module作为顶层设计,故把你所要的顶层设 计文件拉到源文件末尾处: 点击Impl option, 出现属性页对话框...设计使用的单元的总数,组合逻辑,时序逻辑分别占用的单元的总数; 时钟驱动和I/O单元的数量 设计中每一个使用单元类型的详细报告 Net Buffering报告 Net Buffering报告 被插入缓冲或数据源被复制的...复制数据源增加的寄存器 查找表或其他类型单元的数量 HDL Analyst分析和调试设计 HDL Analyst是synplify提供给设计者查看结果, 提高设计速度特性和优化面积的强有力的层 次结构可视化图形工具...; HDL Analyst包含两个原理图视窗,RTL视窗RTL View和目标技术视窗Technology View; 可以显示该路径的延迟信息,关键路径等

    1.9K30

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

    比如,当我们说要设计一个输出字符串的状态机,对很多人来说,首先出现在大脑中的不是一张状态图,而是类似如下函数的一个参考代码: //!...针对这种心理,我们不妨强调下状态机设计的正确流程: 状态机设计的第一步永远都是逻辑设计,追求的是清晰,此时绝不需要考虑所谓的代码翻译时如何才能做到最优; 状态图才是真正的源代码,而翻译后的C代码则是“汇编...可能还会出现在漫长的代码维护过程中出现“某些跃迁的动作与其它不一致”从而给自己挖坑的情况;使用reset可以确保状态机复位,从而安全的从唯一的start点进入,完成统一的初始化动作。...作为例子,我们不妨使用新的方法翻译前面的状态图: fsm_rt_t check_ok(void){ uint8_t chByte; ......此外,对于有经验的老工程师来说,要尝试克服设计状态图时满脑子都是具体代码实现的弊端——至于这样,才能真正拥抱使用状态机进行开发的思维方式。

    11K22

    原子状态机AFSM介绍

    状态越多使用FSM的收益越大,但是大量的对象状态并不多,Context模型没有实现规范,目前代码不容易被理解。 Q:有没有更好的方案?...A:有,就是本文要讲的内容:原子状态机AFSM,将FSM分解为基本状态机,并且通过组合关联实现Context模型。 Q:使用AFSM有哪些好处?...反复调用start或者stop都不会引起错误,所有状态都会自动保持一直正确。 demo演示: Vite App AFSM通用功能 就是封装在基类中的方法和事件,用于使用AFSM对象。...状态变更 start 将尝试从idle切换到starting startSuccess 将尝试从starting切换到running startFailed 将尝试从staring切换到idle stop...将尝试从running切换到stopping stopSuccess 将尝试从stopping切换到idle stopFailed 将尝试从stopping切换到running 所有方法均可以带入参数

    1.2K10

    相亲模型与有限状态机

    虽不能穷举相亲的过程,但是尝试把相亲的场景过程抽象量化,想必可以得到一张复杂的状态流转图。 上面这张图,月老看了都直呼内行。相亲过程中的中间状态只多不少,那么从单身到定终身需要几步呢?...简单来说,当 FSM 被实例化之后,这个用来维护任务的状态的 FSM 只能在当前进程(或者说副本)中使用,因为其他副本并没有这个 FSM 实例对象。...该方式让多个副本通过类选主,选择出一个特定的副本来实例化 FSM,当其他的副本需要执行状态流转时,通过 RPC 或者事件的方式让持有 FSM 的副本处理。...该方式是状态机不再维持当前状态,而是只存储状态流转图,在需要状态流转时,根据当前的实时状态重建状态机,在状态流转结束后,对状态机进行销毁。 最后 状态机本身并不是一个复杂的模型,甚至说得上简单。...繁重的实现反而阻碍了在小场景的使用状态机的勇气。毕竟用 NASA 的方法论去制造一个木板凳是个很怪异的事情。所以不如尝试放手一搏,写一个贴近自己场景的 FSM。劝君上当,上当一回。

    49310

    AI 助力游戏开发实践-有限状态机

    状态冲突和逻辑错误在没有状态机的情况下,角色的状态管理可能会导致一些逻辑错误,比如角色可能在空中尝试再次跳跃,或者在下蹲时错误地开始跳跃。...{ isDucking_ = true; setGraphics(IMAGE_DUCK); } else { // 这里尝试在跳跃时进行下蹲...每次添加新功能或状态时,都需要修改多个条件判断,这不仅增加了工作量,也增加了引入新 bug 的风险。...这就是为什么在游戏开发中,使用有限状态机是一个更好的选择。 FSM 在游戏开发中的作用在游戏开发中, FSM 扮演着至关重要的角色。...事件通常会导致 FSM 从一个状态切换到另一个状态。转换(Transitions):转换定义了从一个状态到另一个状态的具体路径。每个转换都与一个事件相关联,并指定了在该事件发生时应该切换到哪个状态。

    7710

    软件测试方法课程笔记(2)

    要进行多次尝试,确认最合适的等价类划分。 2.4 决策表方法 如下图所示 ?...Alt text 因果图的画的时候要注意使用中间节点来使得整个图易于表达 2.6 正交矩阵法 正交矩阵是一种用于测试的系统化的统计方法 给出几种测试实验的类型: 全面测试 单因子测试 正交测试...是输出函数 给出正常的FSM ? Alt text 四种错误类型: 操作错误 ? Alt text 2.转变错误 ?...这就是最小的可区分序列了, 我们可以遍历所有状态对, 最后生成W集合 具体分两个步骤的细节: 对M构建测试树 一个FSM的测试树, 以初始化状态为根节点, 它包含从根节点至少一条路径到当前FSM..., 初始化的状态, 是测试树的根, 假设测试树已经被构造到水平k, 第k+1的水平将会被构建 在水平k选择一个节点n, 如果从1到k水平中出现出现过, 那么n就是叶子节点并且不能被继续展开, 如果

    75520

    万物皆可状态机

    如图 1-1,1-2 都使用了状态转移图这一描述方式。状态转移图经常在设计规划阶段定义逻辑功能时使用,也可以在分析代码中状态机时使用,通过图形化的方式非常有助于理解设计意图。...StateCAD 还能能自动检测状态机的完备性和正确性,对状态转移图中的冗余状态、自锁状态、歧义转移条件和不完备状态机等隐含错误都会报警,并协助设计者更正错误。...而一段式 FSM 描述不利于时序约束、功能更改、调试等,而且不能很好的表示米勒 FSM 的输出,容易写出 Latches,导致逻辑功能错误。...其实对于绝大多数FSM,都可以采样图 1-4,或图 1-5,或图 1-6 的结构建模。一般来说,推荐使用后两种结构建模。...对整个设计使用 FSM Compiler 进行优化,只需在主界面重要综合优化参数中选择【FSM Compiler】选项,或者在综合优化参数设置时选中【FSM Compiler】选项即可。

    1.2K21

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

    【说在前面的话】 ---- 在前面的讲解中,我们介绍了如何使用状态图的方式来设计有限状态机、明确了状态图设计的“清晰”原则,并结合最简单和常用的switch状态机翻译模式详细说明了状态图的“无脑翻译”...使用了共享函数serial_out(),即便该函数本身可以保证原子性,但它仍然是一个临界资源——换句话说,即便抛开 print_str 的可重入性问题不谈,当有该状态机存在多个实例时,你能保证每个字符串的打印都是完整的么...这意味着同时执行多个print_str是“不安全”的,是会出问题的(比如字符串长度不一致时很可能会出现buffer-overflow的问题),因此可以说 print_str 是不可重入的。...如下图所示: 观察修改后的状态图,我们应该注意以下的一些变化: 在图的右下角,出现了一个带标题的矩形框。...一旦习惯了使用多实例的方式来设计状态图,其实你就真正进入了“多任务程序设计”的领域——无论你是使用RTOS还是裸机,此时此刻,或多或少,都在同一个起跑线上了。

    1.5K21

    AI 助力游戏开发实践-有限状态机

    2、状态冲突和逻辑错误 在没有状态机的情况下,角色的状态管理可能会导致一些逻辑错误,比如角色可能在空中尝试再次跳跃,或者在下蹲时错误地开始跳跃。...isDucking_ = true; setGraphics(IMAGE_DUCK); } else { // 这里尝试在跳跃时进行下蹲...每次添加新功能或状态时,都需要修改多个条件判断,这不仅增加了工作量,也增加了引入新 bug 的风险。...这就是为什么在游戏开发中,使用有限状态机是一个更好的选择。 FSM在游戏开发中的作用 在游戏开发中,FSM 扮演着至关重要的角色。...每个转换都与一个事件相关联,并指定了在该事件发生时应该切换到哪个状态。 在实际应用中,FSM 可以通过图表或代码来表示。

    22720

    AI 助力游戏开发实践-有限状态机

    状态冲突和逻辑错误 在没有状态机的情况下,角色的状态管理可能会导致一些逻辑错误,比如角色可能在空中尝试再次跳跃,或者在下蹲时错误地开始跳跃。...isDucking_ = true; setGraphics(IMAGE_DUCK); } else { // 这里尝试在跳跃时进行下蹲...每次添加新功能或状态时,都需要修改多个条件判断,这不仅增加了工作量,也增加了引入新 bug 的风险。...这就是为什么在游戏开发中,使用有限状态机是一个更好的选择。 FSM 在游戏开发中的作用 在游戏开发中, FSM 扮演着至关重要的角色。...每个转换都与一个事件相关联,并指定了在该事件发生时应该切换到哪个状态。 在实际应用中, FSM 可以通过图表或代码来表示。

    8410

    自己动手造一个状态机

    应用场景 FSM 应用场景满足的规则: 可以用状态来描述事物,并且任一时刻,事物总是处于一种状态 事物拥有的状态总数是有限的 通过触发事物的某些行为,可以导致事物从一种状态迁移到另一种状态 事物状态变化是有规则的...可合并多场景的状态转移配置 可以将多个场景的状态转移配置合并,不合并也可以正常使用。...状态配置的图化 基于状态流转配置,在线展示状态转移图。...Looplab fsm 示例演示 Looplab fsm 一个简单的使用示例如下所示: func main() { var afterFinishCalled bool fsm := fsm.NewFSM...异常处理: 状态机内部的错误会通过error的形式抛给业务方 业务方的calllback函数执行异常时,需要业务方通过cancel方法主动通知状态机结束此次状态流转,但是不能再状态变更后的AfterTransCallback

    44210

    关于有限状态机(FSM)的一些思考

    文章思维导图 什么是有限状态机? 有限状态机,英文翻译是 Finite State Machine,缩写为 FSM,简称为状态机。...基于前面学习到的状态机描述方式(状态转移图),分析下载器的状态转移可以画出以下状态转移图: 为什么是这些状态,我们可以考虑以下下载场景: 初始未开始下载时,下载任务的初始状态应该处于待开始状态 用户发起下载动作...有限状态机的一些展望 成为团队内不管是技术还是产品都可以通过状态转移图来梳理业务的有利工具 可以使用有限状态机重构UI,降低业务复杂度 帮助团队写出易懂更好维护的代码,提升代码可测试性 使用图遍历算法(...DFS/BFS),自动生成测试用例 行为上报和录制重放 根据代码生成状态转移图实现可视化,参考xstate 补充材料:状态机代码可视化 我们可以思考一个问题,目前我们实现状态机的思路,基本是先画状态转移图...参考XState,我们找到了一些思路: 状态机代码 生成的可视化状态机转移图 参考资料 维基百科:有限状态机 https://statecharts.dev/ 开始使用状态机来编写你的代码吧!

    2.1K31

    HDLBits:在线学习 Verilog (二十八 · Problem 135-139)

    小提示:使用前一题Problem 134 PS/2 packet parser / Fsm ps2 中的状态机,并添加用于捕捉输入字节的数据路径即可。...同时,如果输入检测到了了连续7个或更多的1时,接收方还需要发出错误信号。...:错误(Reeor)(7个或更多的1)(err)。 重置FSM时,其状态应恢复到之前输入0的状态。 以下是一些示例序列,详细的说明了状态机所需的操作。 ? 输入0111110,需要舍弃后面的0 ?...复位逻辑和输入连续7个以上的1 小提示: 1、请使用10个状态以内的摩尔机。 2、状态图: ?...状态图 解答与分析 这道题可能比较难理解,不知道题干在说什么,但是看了下面的波形图还是能理解一些的,就是对连续输入的比特流进行判断,当连续输入5个1时,下一拍disc=1,当连续输入6个1时,flag=

    73820
    领券