gpt4 book ai didi

fsm - FSM数据结构设计

转载 作者:行者123 更新时间:2023-12-04 13:45:43 25 4
gpt4 key购买 nike

我想编写一个以空闲状态开始并根据某些事件从一种状态转移到另一种状态的FSM。我对FSM的编码不熟悉,而Google也无济于事。
欣赏是否有人可以发布可用于同一数据结构的C数据结构。

谢谢,
syuga2012

最佳答案

过去,我们已经为Telcos实现了有限状态机,并且始终使用预先填充的一系列结构,例如:

/* States */
#define ST_ANY 0
#define ST_START 1
: : : : :

/* Events */
#define EV_INIT 0
#define EV_ERROR 1
: : : : :

/* Rule functions */
int initialize(void) {
/* Initialize FSM here */
return ST_INIT_DONE
}
: : : : :

/* Structures for transition rules */
typedef struct {
int state;
int event;
(int)(*fn)();
} rule;
rule ruleset[] = {
{ST_START, EV_INIT, initialize},
: : : : :
{ST_ANY, EV_ERROR, error},
{ST_ANY, EV_ANY, fatal_fsm_error}
};

我可能已将函数指针 fn声明为错误,因为它来自内存。基本上,状态机在数组中搜索相关的状态和事件,然后调用该函数执行必须执行的操作,然后返回新状态。

由于规则的优先级取决于它们在数组中的位置,因此将特定状态放在首位,将ST_ANY条目放在最后。找到的第一个规则是使用的规则。

另外,我记得我们为每个状态的第一个规则都有一个索引数组,以加快搜索速度(所有具有相同起始状态的规则都被分组了)。

还请记住,这是纯C语言-可能有更好的方法来使用C++。

关于fsm - FSM数据结构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/726032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com