微控制器的状态机与 RTOS

Posted

技术标签:

【中文标题】微控制器的状态机与 RTOS【英文标题】:State machine versus RTOS for microcontrollers 【发布时间】:2011-10-30 07:41:41 【问题描述】:

我偶然发现了free state machine tool。这似乎是用于以图形方式对嵌入式系统进行编程。通过这样做,作者声称生成的代码比使用 RTOS 时更易于维护。这个工具是基于 UML 的,很高兴知道,但是学习曲线很陡。

我想知道这里一些更有经验的程序员对这个工具的看法。

我正在为LM3S5P36 微控制器开发一个嵌入式应用程序。 TI 有一个名为 Code Composer Studio (CCS) 的 IDE。我还没有接触到 CCS,但我怀疑它是否具有能够将所需行为输入状态机图表、转动曲柄并弹出 C 或 C++ 代码的酷特性。然后回去编辑图表,生成相应的修改代码。我用 C 语言编写了微控制器,但对 UML 几乎一无所知。过去我维护了两个文件,一个是微控制器代码,另一个是流程图。每个代码修订都意味着维护两个单独的文件。

所以我的困境是:发现了这个很酷的图表到代码的多合一文档工具后,我很想使用它,但更重要的是,我只想完成我的项目。我是按旧方法做,还是花几周时间学习 UML?

【问题讨论】:

由于这实际上更像是一种主观的“调查”问题,而不是可以客观回答的直接问题,我建议将其更改为“社区 wiki”条目。如需更多信息,请参阅 this answerthis question 【参考方案1】:

我没有尝试使用该工具,但如果您获得 UML 图,那么它总是更适合您的项目文档。现在使用类图从 UML 生成代码非常好,我想其他图也可以这样。

【讨论】:

【参考方案2】:

您可能还对 Miro Samek 的书“Practical UML Statecharts in C/C++”感兴趣。请注意,Miro 是 Quantum Leaps 的创始人兼总裁,因此本书与该工具密切相关。

相比 RTOS 开发,Miro 似乎在状态图开发方面投入了大量资金,他就该主题撰写了这本书并发表了大量博客。他在 LinkedIn 的 Real-Time Embedded Engineering 组上发起了主题为“Is an RTOS really the best way to design embedded systems?”的主题 - 那里有很多关于这个主题的意见!

我不确定这两者是否一定是不同的;将单个 RTOS 线程实现为状态机通常很有用(并且经常这样做)。他在他的博客“I Hate RTOSes”中提出了一些好的观点,但他的推理主要是基于糟糕的应用程序设计而不是 RTOS 技术本身。就像 C 或 C++ 使用不当会很危险一样,RTOS 也是如此。通常会看到线程太少、内聚性差且耦合紧密的应用程序,但我相信 Miro 一想到解决方案是更多线程,就会大发雷霆!

UML 2.2 规定了 14 种图,状态机只是其中一种,所以没有必要学习完整的 UML。在这种情况下使用它是因为它是一个定义良好的模型,具有清晰的语法和语义,适用于定义行为细节。状态机图(或状态图)可能是最容易理解的 UML 行为图,并且具有任何 UML 图的最清晰定义的语义。

【讨论】:

感谢您提供有用的想法,Clifford。你是对的,它不是一个简单的状态机或 RTOS 选择,两者都可以。请参阅上面我的扩展帖子。【参考方案3】:

http://www.StateSoft.org 上提供了一种可能满足您需求的方法 它使用非常小但功能完整的 UML 子集 - 如果您查看状态机库中的图形 API 集,您将在几分钟内直观地学习所需的 UML SM 符号子集。针对嵌入式系统内存使用的效率,生成了高度优化的表格。根据您使用 C 还是 C++,您可以选择紧凑型表执行器。

【讨论】:

以上是关于微控制器的状态机与 RTOS的主要内容,如果未能解决你的问题,请参考以下文章

运用 作为裸机微控制器的定时器?

微控制器有哪些型别

你怎么知道微控制器何时复位?

我可以使用Visual Studio从多个微控制器读取数据吗?

MCU,RTOS,物联网之间的关系

stm32cubemx怎么使用