我已经编写了包含状态机[1]的C代码。现在,我正在寻找一种生成html文件的方法,该文件记录该状态机,例如[2]。
我看过氧气[3]。它可以提取文本,调用图等,但是不能生成状态机图。我看过Graphviz [4]。它可以生成状态机图,但不能将文本和图合并到一个html文件中。我找到了Doxygen预处理器[5],声称可以记录状态机,但最近一次更新是从2009年开始的。
没有人知道一个可以从源代码中提取文本和图表,或者在代码中特制的注释并且正在积极开发的系统?
编辑1
我没有像我应该的那样清楚地表达我的问题。我想找出一个工作流程,使我能够记录和验证为基于微控制器的产品制作的C代码。我希望使不具备编程知识的用户能够理解我将要在C代码中实现的内容,因此,我编写的C代码实际上就是用户想要的东西的可能性更大。] >
到目前为止,我想到了这个工作流程:
1]我和用户坐下来,讨论可能发生的所有故障情况,以及我的程序应如何应对这些情况。这存储在电子表格中。
2)我将步骤1中的电子表格转换为一个或多个状态机。这可以用笔和纸来完成。完成此操作后,我让用户检查状态机是否与电子表格一致。
3)我以机器可理解的形式编写状态机,然后让程序生成状态机的图形表示。我让用户检查此状态机是否与步骤2的版本相同。
4)我采用状态机的机器可理解的形式,并用它来为状态机的每个状态和转换编写单元测试。我让具有编程技能的同事检查单元测试是否与状态机一致。
5)我编写了C代码,并对其进行了调整,以使其通过所有单元测试。
6)根据步骤1中的情况测试成品。
在记下来的同时,我意识到在此过程中有很多手动工作可以自动完成。您知道可以做到这一点的工具吗?
SMC [6]由Fiddling Bits建议,看起来很有希望,但是我不确定它是否可以生成C文件,就像[1]下发布的文件一样。我也不确定是否可以像这样往返:我将状态机写入.sm文件中,让SMC生成C文件。我编辑C文件,让SMC更新.sm文件,编辑.sm文件,然后让SMC重新更新C文件。
[1] C代码
typedef enum { stIDLE=0, stDONE } TRXSTATES; TRXSTATES theState = stIDLE; void execute (void) { switch (theState) { case stIDLE: { theState = stDONE break; } case stDONE: { break; } } }
[[2]所需的html页面
Some smart text about this state machine +--------+ +--------+ + stIDLE + ----> + stDONE + +--------+ +--------+
[5] https://sites.google.com/site/abudden/doxygen-preprocessor
[6] http://smc.sourceforge.net/
我已经编写了包含状态机[1]的C代码。现在,我正在寻找一种生成html文件的方法,该文件记录该状态机,例如[2]。我看过氧气[3]。它可以提取文本,...
[一种可能的方法是使用plantuml
在doxygen
中用文本编码图表。
图表示例: