【发布时间】:2015-01-16 14:58:12
【问题描述】:
关于通过 UART 在 MCU 中设置有限状态机 (FSM),我有一个相当简单的问题。
我有一个相当小的 FSM,大约有 15 个状态,每个状态只与一个事件相关联。 FSM 通过 UART 发送数据来设置,但是,简单数据也通过 UART 接收。一个例子可能是:
- 设置 FSM:(例如,在显示器上显示一些数字)。
- 发送要显示的数字(数据流紧随其后)。
由于 UART 作为 SPI 控件工作,我想知道是否有一些标准或智能方法来区分接收到的数据是 Set FSM 还是发送的原始数据。我目前的解决方案仅限于,每次发送两个字节,一个设置 FSM,另一个是原始数据。该解决方案携带大量冗余数据,因为我发送的每个原始数据字节都发送 FSM 部分。此外,数据的数量可能会有所不同,这使寻找方法的任务变得复杂,从而简化了问题并减少了所说的冗余数据的数量。
所以我在想你们中是否有人知道更聪明的方法,或者是否有一些通用标准可以遵循?
【问题讨论】:
-
当心不区分数据的两个元素的解决方案。许多系统在没有这样的工作的情况下构建了一段时间,直到接收者碰巧听到在它正在收听之前开始的消息的第二个字节,并将其误认为是新消息的第一个字节。对此有许多可能的解决方案,但除非使用其中一种,否则系统不会很健壮。
-
您正在寻找的“标准解决方案”称为bit stuffing。但是对于串行端口,流量控制信号(RTS,DTR,...)是最简单的方法,如果你有的话。