问题标签 [fsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1137 浏览

c++ - 在相同状态类型的各个屏幕之间切换?

我一直对我正在处理的程序的基本结构有疑问。我是一个非常缺乏经验的程序员,试图自学使用多种状态的程序的基础知识。

现在,我有一个非常简单的游戏式程序,它带有一个游戏循环,将事件、逻辑和渲染重定向到我的 StateManager 类,它将状态推送和弹出到 . StateManager 类然后将事件、逻辑和渲染重定向到向量的 back() 上的任何状态。这个想法是为程序的每个阶段(在这种情况下是一个简单的游戏,包括启动画面、菜单、游戏玩法、死亡画面等)提供各种不同的状态......

但是,我是一个非常新手的编码员(尽我所能去学习),而且我从第一个状态课程开始就遇到了我的程序的一个基本问题......

我制作的第一个类是 SplashScreenState。基本概念是有一个状态,基本上只显示一系列“启动屏幕图像”(例如,假设为 3),每次用户按下一个键,它切换到下一个图像,并且最后(当它没有启动画面图像循环时)切换到下一个状态(菜单状态)。

我的问题是我很难弄清楚如何构建它。最初,我错误地将每个不同的初始屏幕图像视为 SplashScreenState 的一个实例。但是,我认为这样做是不正确的,因为从技术上讲,所有 3 个启动画面都是同一个“状态”的一部分。

所以现在我有两个主要问题:

  • 第一个问题是我不确定如何/在哪里存储所有启动画面图像。如果我想在程序启动时在 3 个不同的屏幕图像之间循环,我应该让它们都成为 SplashScreenState 类的成员吗?或者简单地为“currentImage”设置一个类成员是否更聪明,并且每次用户点击一个键时,它都会运行一个 load() 函数将下一张图像加载到 currentImage 指针中?制作图像数组或矢量并循环浏览它们会更好吗?我只是不确定...

  • 我的第二个问题是 SplashScreenState 的 eventhandling() 。我知道我希望屏幕上的图像像这样改变;*image1 -> image 2 -> image 3 -> changeState(menuState).. 这样每次用户按下键盘上的一个键时,它就会切换到下一个启动画面,直到最后一个启动画面,然后它会改变状态到主菜单。我也不确定最好的方法是什么。我应该为每个初始屏幕创建一个枚举并通过它们递增(直到它改变状态的最终屏幕)?我还认为,如果我确实将所有各种屏幕存储在一个数组中,那么我可以轻松地递增它们,但是那会不会优化,因为所有屏幕都必须始终存储在内存中?

无论如何,我知道这个问题可能是非常基本和愚蠢的,但不幸的是,这就是我现在所处的位置!我没有接受过任何正规的编程教育,而且我一直在自学,所以我真的非常感谢这个网站上提供的所有帮助和专业知识!^^

谢谢!

0 投票
3 回答
520 浏览

c++ - 如何获得返回自身的 boost::function (或其他通用函数包装器)?

我最近迷上了 Erlang 基于 actor 的并发模型的简单性,并且正在尝试用 C++ 实现它的某些部分的想法。沿着这些思路,我也喜欢将有限状态机实现为表示状态的函数集合的想法,其中通过从一个函数到下一个函数的尾调用来进行转换。

我想在 C++ 中尝试类似的东西。但是一个天真的实现很可能会遇到这样一个事实,即在我的编译器(GCC 4.1 with -O0)中进行尾部调用最终会导致堆栈溢出。所以相反,我想做的是让每个状态/函数返回一个仿函数(下一个要进入的状态),并有一个底层循环,它只是顺序调用一个仿函数,然后调用返回的仿函数,然后调用仿函数因此返回,等等。类似的东西:

所以,我的问题是,我该如何定义statefunctor?特别是,我希望它能够保存任意函子(如boost::bind(...)可能创建),而不仅仅是函数指针。

注意:我使用boost::bind, boost::functionboost::ref而不是他们的std::对应物,因为我坚持使用不支持 C++11 的 GCC 4.1。赞赏 C++03 中有效的解决方案;-)。

0 投票
1 回答
231 浏览

c - 分段错误 C 有限状态机

我对 C 编程相对较新,我正在尝试制作一个分隔符检查器,但由于某种原因,每次我运行我的代码并获取我的输入来检查分隔符时,它都会出现分段错误(核心转储)错误。

下面是主程序的代码:

似乎它从未进入子程序fsm,因为我在printf子程序的开头输入了一个权利,它从未出现过。printf它确实会询问我的输入,如果我把它放在子程序行之前的主程序中,它会打印出来。

这是我的原型:

如果有任何帮助,这里是子程序的开头:

0 投票
1 回答
3442 浏览

verilog - 有限状态机verilog

我想知道是否有人可以阐明如何在 Verilog 中编码一个模式 fsm,该模式在 8 个 LED 上产生 4 种不同的模式,并且 LED 会改变每个滴答脉冲。我知道我应该使用状态寄存器和组合下一个状态逻辑,但我不确定如何编写它。

我希望有人可以提供一个例子。

0 投票
1 回答
2465 浏览

regex - 用于快速解析、正则表达式生成的 Perl 有限状态机

我需要匹配非常短的文本段(1 到 7 个字母),并且我知道如何在有限状态机中指定可接受的字符串。我认为为这个应用程序构建一个正则表达式会变得过于混乱且难以维护。我需要一个易于使用的模块,我可以在其中编写 FSM,如果该模块可以生成一个正则表达式供我使用,那将是一个很大的好处。有谁知道可以简单地做到这一点的模块?

0 投票
2 回答
2468 浏览

java - 什么是 Erlang 替代品?

对于 Java、C++ 等其他编程语言,尤其是对于 Erlang 来说,最接近的框架是什么?

  1. 嵌入式linux应用
  2. 除了 Erlang 的其他主要功能之外,该框架还支持 Erlang 的 FSM 模型的近似风格,因此对于我收集的此类要求,例如 Node.js 真的不是一个很好的选择
0 投票
3 回答
542 浏览

vhdl - 良好实践(对于 FSM):BUSY 或 IDLE

让我们考虑 VHDL 中的状态机,它们处于某种空闲状态,直到它们被触发工作一段时间并再次进入空闲状态。

什么是更好的做法:

  • 向外界添加一个IDLE信号,表示“我可以做事
  • 向外界添加一个BUSY信号,表示“我现在不能做事
0 投票
1 回答
543 浏览

c# - 为长时间运行的进程设计 FSM 的最佳实践

我主要是 ac# 开发人员,正在寻找一些关于为一系列长时间运行的进程设计有限状态机的指导(理论和/或代码示例)。定义的每个操作都可以运行几分钟。我只是使用 Windows 任务计划程序来管理计划和实例化。

下面是我正在查看的内容的简化大纲。到目前为止,我已经使用 Stateless 构建了 Op Status FSM。现在,我正在尝试找出处理操作顺序的最佳方法,其中包含一些条件,例如项目#3 所示。这些条件基于 Op2 产生的数据。

到目前为止我考虑过的选项:

  • 为操作序列创建一个 FSM(似乎过于复杂,但也许我在某处缺少基本知识)
  • 为每个操作创建一个操作管理器,让每个管理器担心它感兴趣的状态以及下一个状态应该是什么

操作 -> 按顺序执行下一个操作

  1. 无 -> Op1
  2. 操作 1 -> 操作 2
  3. Op2 -> Op3 或 Op4 有条件
  4. 操作 3 -> 操作 4
  5. 操作 4 -> 操作 5
  6. Op5 -> 无

操作状态

    • 触发器:计划 -> 待定
    • 约束:必须设置操作
  • 待办的
    • 触发器:运行 -> 运行
  • 跑步
    • 触发器:失败 -> 错误
    • 触发器:成功 -> 空闲
    • 触发器:未就绪 -> 待处理
  • 错误
    • 触发器:重试 -> 待处理
    • 触发器:取消 -> 空闲(删除分配的操作)
0 投票
1 回答
515 浏览

c++ - 如何将有限状态机集成到我的应用程序中?

嗨,对不起,如果这已经被覆盖了。

我主要专注于编写数字软件,但在应用程序设计方面我有点菜鸟。

我编写了一个库,它基本上从不同的数据流或静态文件中获取输入,执行一些数据分析并将数据输出到屏幕或文件等,我决定编写一个 gui 应用程序以使其更加用户友好。

必须进行库调用的顺序相当简单,但是根据应用程序所处的状态,应该处理哪些事件有一些限制。即我不希望用户在数据源中开始抓取它们已经从另一个处理。

所以我决定使用有限状态机。但是,我想知道将有限状态机集成到您的应用程序中的最佳实践是什么。我应该将它作为我的库的公共接口,还是应该将它本质上用作 MVC 框架中的控制器,其中库是模型,GUI 是视图?还是有更好的方法来控制应用程序的流程?

谢谢你的帮助。

0 投票
1 回答
839 浏览

vhdl - VHDL 状态机没有循环

SO用户,

我正在对我的 ADC 进行编程(ADC0804 安装在连接到 Spartan-3 FPGA 板的面包板上)。现在,我正在使用这个 ADC 为我的湿度传感器提供数字输出。ADC 输出一个 8 位值,我显示在 FPGA 板上的 LED 上。

现在,我正在以这样一种方式编写状态机,即使我改变湿度水平,ADC 也将始终继续保持输出值。但就我目前的实现而言,即使我循环回到第一个状态,我也没有得到连续的值流。我一次只能得到一个 8 位的值(IE;我必须不断按下重置按钮来更新 LED 上显示的值)。以下是我的代码。

您会注意到,在状态“READ2”中,我循环回到开头(这样我可以在状态转换时不断读取值),但不知何故,我认为这不起作用。任何人都可以就如何解决这个问题提供一些帮助吗?