- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在两个设备之间创建一个简单而强大的通信协议(protocol):主设备和从设备。主机可以是 pc 或 arm iMX6 bard 或具有 QT 或 Visual Studio 应用程序的等效板,而从机可以是微处理器,如 AVR 或 Microchip。我想找到最好的解决方案来设计它们之间的简单而强大的串行协议(protocol)。我考虑过两种可能的解决方案,但也许还有其他解决方案。
第一种方案——同步通信
MASTER 发送 COMMAND_START(一个字节)
SLAVE 以 START_ACKNOLEDGE(一个字节)回答
MASTER 发送命令 COMMAND(更多字节,末尾有一个校验和字节)
SLAVE 用 COMMAND_ACKNOLEDGE(一个字节)回答,如果有必要用一些字节的信息包(一些字节末尾有一个校验和字节)
MASTER 回复 PACKETS_ACKNOLEDGE(一个字节)
MASTER 发送 COMMAND_END(一个字节)
从站必须在 1 毫秒或 2 毫秒内回复主站。使用此解决方案,主站可以轻松检查通信,如果从站没有应答,或者如果从站在 1 或 2 毫秒内没有应答,或者如果从站发送的数据包的校验和不正确,则主站可以发送另一次命令。这样master就很容易处理这种情况。从另一方面看,这个协议(protocol)是一个同步通信协议(protocol)。
第二种方案:
Master向slave发送命令,结构如下:
起始字节:0xAA (10101010)
命令字节:一个字节(不同于0xAA、0xCC、0x33、0xC3或0x3C)
数据长度:一个字节,有数据字节数的信息(有必要吗?)
数据字节:一个或多个字节
校验和:一个字节
结束字节:0xCC 0x33 0xC3 0x3C (11001100001100111100001100111100)
在这种情况下,slave 可以使用带有两个指针的循环缓冲区,它可以做这样的事情:
if(RxStart!=RxStop)
{
while((RxStop>=RxStart)&&(RxStop-RxStart>=X+4))
{
if(RxBuff[RxStart & 0xFF]==0xAA && RxBuff[(RxStart+X) & 0xFF]==0xCC &&
RxBuff[(RxStart+X+1) & 0xFF]==0x33 && RxBuff[(RxStart+X+2) & 0xFF]==0xC3
&& RxBuff[(RxStart+X+3) & 0xFF]==0x3C)
{
if(CheckSum==OK)
{
switch(RxBuff[RxStart+1 & 0xFF])
{
}
}
}
}
}
在这种情况下,主机如何检查发送给从机的命令是否已经收到?从站是否必须向主站发送确认命令,例如一个字节用于确认,一个字节包含有关命令的信息? master 是否必须检查 slave 是否在 1ms 内响应命令? master 是否必须检查从 slave 收到的 acknoledge 的数量?如果从从机收到的确认少于主机发送的命令,那么主机怎么知道哪个命令丢失了?让我知道!
非常感谢您的支持!
最佳答案
我会把它作为评论,但我还没有声望:)
您回避这些标准有什么原因吗? i2C、SPI、UART?
如果您需要基于软件的协议(protocol),可以引用一些很好的示例来模拟您的协议(protocol):
https://github.com/plieningerweb/esp8266-software-uart https://github.com/wendlers/msp430-softuart
如果您确实想选择一个标准,这里有一个很好的比较页面来找出您需要的那个: http://www.embedded.com/design/connectivity/4023975/Serial-Protocols-Compared
关于c - 用C语言设计一个简单而健壮的主机(PC或ARM板)和从机(微处理器)之间的串行协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414920/
我正在寻找一种解决方案来透明地保留 Perl 数据结构(甚至不是对象,但对象支持将是一个加号)而无需循环引用。我不太关心后端,但我更喜欢 JSON。对象的数量会相对较少(几千个 hashref,每个都
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在我的办公室,我们正在使用 (https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher?view=netframe
我是一名优秀的程序员,十分优秀!