|
1
6
|
|
|
2
2
如果可能的话,让一个人在电缆的一端找出电缆的另一端是什么。 理想情况下,一个人可以连接一个哑终端,敲击键盘三次(输入问号回车),然后一条长而详细的信息会回来,描述它是什么样的机器,它的型号是什么,它的名称和电话号码以及建立它的组织的网站,“官方”协议版本号,以及非官方的构建时间:
每次机器启动时也发送相同的详细信息。 如果可能的话,试着设计你的协议,让一个有哑终端的人可以和你的设备通话。
你可能还想浏览一下 common protocols for embedded systems . 有没有理由使用比标准更难解码的东西 Netstring format |
|
|
3
0
这个问题有点笼统,无法得到明确的答案。嵌入式系统可能需要进行许多方面的通信; 它需要与多少个对等方进行通信? 通信需要多少数据? 协议的物理介质是什么?带宽限制和易出错因素是什么? 所有这些需求和资源限制肯定会限制系统,然后您就可以开始了解协议需要什么了。一旦你知道了这些问题,你就可以预测一些需求在将来是如何改变/扩展的。从那里您可以设计协议来适应(或不适应)最坏的用例。 |
|
|
4
0
我会用 HDLC . 我过去很幸运。我想要一个点对点的连载只要使用 Asynchronous framing 除了使用HDLC对数据包进行成帧之外。我的数据包格式如下。这就是使用802.11传递选项的方式
每个命令包的总大小是len+2
另一个优点是,您可以添加新命令,如果您正确地设计解析器以忽略未定义的命令,那么您将具有一些向后兼容性。 所以把它们放在一起,数据包会像下面这样。
然后,系统将监视串行流中的标志0x7e,当它出现时,您将检查其长度是否为pklen>=4和pklen=len+4,并且crc有效。注意不要只依赖于crc的小数据包,你会得到很多误报也检查长度。如果长度或crc不匹配,只需重置长度和crc,然后开始解码新帧。如果是匹配的,则将数据包复制到新的缓冲区,并将其传递给命令处理函数。接收到标志时总是重置长度和crc。 对于命令处理函数,抓取cmd和len,然后使用开关来处理每种类型的命令。我还要求某些事件发送响应,以便系统的行为类似于事件驱动的远程过程调用。 因此,例如,传感器设备可以有一个计时器或响应一个命令来获取读数。然后,它将格式化一个数据包并将其发送到PC机,PC机将响应它已收到该数据包。如果没有,则传感器设备可以在超时时重新发送。 另外,在进行网络传输时,应将其设计为网络堆栈,如 OSI modle data link layer 以及 RPC and command handling is the Application Layer . |
|
|
user8040474 · 网络连接不工作 8 年前 |
|
|
Genhain · swift中链式泛型类型推断闭包 8 年前 |
|
|
Joe · 将数据从子VC传回集合视图单元格 8 年前 |
|
|
NaderBesada · 协议字典Swift 4 8 年前 |
|
|
Marmelador · 通过协议更改代理的属性 8 年前 |