代码中的真值表?如何构造状态机?

代码中的真值表?如何构造状态机?,第1张

概述我有一个(有点)大的真值表/状态机,我需要在我的代码(嵌入式C)中实现.我预计这个状态机的行为规范在将来会发生变化,所以我希望将来可以很容易地修改. 我的真相表有4个输入和4个输出.我有一个Excel电子表格,如果我可以把它粘贴到我的代码与一点格式,这将是理想的. 我在想我想要访问我的真相表: u8 newState[] = decisionTable[input1][input2][input3 我有一个(有点)大的真值表/状态机,我需要在我的代码(嵌入式C)中实现.我预计这个状态机的行为规范在将来会发生变化,所以我希望将来可以很容易地修改.

我的真相表有4个输入和4个输出.我有一个Excel电子表格,如果我可以把它粘贴到我的代码与一点格式,这将是理想的.

我在想我想要访问我的真相表:

u8 newState[] = decisiontable[input1][input2][input3][input4];

然后我可以访问输出值:

setoutputPin( liNE_0,newState[0] );setoutputPin( liNE_1,newState[1] );setoutputPin( liNE_2,newState[2] );setoutputPin( liNE_3,newState[3] );

但是为了得到这个,看起来我会像这样做一个相当混乱的表:

static u8 decisiontable[][][][][] = {{{{ 0,0 },{ 0,0 }},{{ 0,0 }}},{{{ 0,1,1 },1 }},{ 1,1 }}}},{{{{ 0,1 }}},1 }}}};

那些嵌套的括号可能有点混乱 – 有没有人有更好的想法,我如何可以保持一个漂亮的表在我的代码?

谢谢!

根据HUAGHAGUAH的答案编辑:

使用合并的每个人的输入(谢谢 – 我希望我可以“接受”3或4的这些答案),我想我会尝试它作为二维数组.我将使用一个小的位移宏来索引到我的数组中:

#define SM_inputS( in0,in1,in2,in3 ) ((in0 << 0) | (in1 << 1) | (in2 << 2) | (in3 << 3))

这将让我的真相表格如下所示:

static u8 decisiontable[][] = {{ 0,1 }};

然后我可以这样访问我的真相表:

decisiontable[ SM_inputS( line1,line2,line3,line4 ) ]

我会给一个镜头,看看它是如何工作的.我还将用更有帮助的#define替代0和1,表达每个州的含义,以及/ ** /评论,说明每行输出的输入.感谢大家的帮助!

解决方法 不需要多维表.使用4位=> 4位映射,您可以有一个u8 [16]阵列映射输入到输出.状态查找将会更便宜,您可以使用某些移位和掩码 *** 作来提取单个位.

如果填充行的算法易于编码,您可以#define一个宏,按索引号填充每行.

总结

以上是内存溢出为你收集整理的代码中的真值表?如何构造状态机?全部内容,希望文章能够帮你解决代码中的真值表?如何构造状态机?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存