|
7
|
| Chathuranga Chandrasekara · 技术社区 · 15 年前 |
|
|
1
15
你需要发送10位,因为你一次发送一个字节,你必须发送16位。最大的问题是速度有多重要,发送端和接收端的同步程度如何?根据这些条件,我可以想出3个答案。 常规采样,未知连接点
我会派人
我正在努力寻找一个好的两位纠错码,所以我想我应该把p设为2,3和4位的奇偶校验位(0,a b以上)和qa设为56和7位的奇偶校验位(c,d,e以上)。举个例子也许会更清楚。
然后,您可以检测到许多不同的错误情况,如果失去同步,快速检查发送的是哪个字节,微控制器中的任何操作都不会花费很长时间(我将使用8项查找表进行奇偶校验)。 如果您知道读卡器和写卡器同时启动,只需将4个10位值作为5个字节发送。如果你总是一次读5个字节,那就没问题了。如果您想节省更多的空间,并且已经有了很好的示例数据,我将使用 huffman coding 密集数据,未知连接点在7字节中,您可以发送5个10位值和6个备用位。发送5个值,如下所示:
然后每当你看到31在一行中最重要的一位,你就知道你有字节1,2和3。这个想法浪费了56位中的1位,因此可以使效率更高,但你必须一次发送更多的数据。例如(5个连续的,16字节中发送120位):
|
|
|
2
7
最好的方法是将数据转换成一个ASCII字符串并以这种方式发送它-这使得调试变得更加容易,并且避免了各种通信问题(某些控制字符的特殊含义等)。 如果您确实需要使用所有可用带宽,那么您可以将4个10位值打包成5个连续的8位字节。你需要小心同步。 |
|
|
3
4
因为您指定了“最快的方式”,所以我认为不可能将数字扩展到ASCII。 在我看来,代码的简单性和性能的良好折衷可以通过以下编码获得: 两个10位值将被编码成3个字节,如下所示。 前10位值位:=abcdefghij 第二个10位值位:=klmnopqrst 要编码的字节:
还有一个位(u)可用于校验所有20位上的奇偶校验以进行错误检查,或仅设置为固定值。
|
|
|
4
0
我通常使用一个起始字节和校验和,在这种情况下是固定长度的,所以发送4个字节,接收者可以寻找起始字节,如果接下来的3个字节加起来是一个已知的数量,那么它是一个很好的包,取出中间的2个字节,如果不继续寻找的话。接收器总是可以重新同步,而且不会浪费ascii的带宽。Ascii是另一个选项,它是一个起始字节,不是数字,可能是十进制的四个数字。十进制在微控制器中肯定不好玩,所以以一些非十六进制的例如X开始,然后用十六进制ascii值作为数字的三个字节。搜索x检查下三个字节,希望最好。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |