7
|
Chathuranga Chandrasekara · 技术社区 · 14 年前 |
![]() |
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检查下三个字节,希望最好。 |
![]() |
JeffreyH · 需要解释InvenSenses运动驱动程序 7 年前 |
|
gotti123 · 在MCU上查找Pin 7 年前 |
![]() |
frank_010 · 在32位字存储器中连续读取3个字节 7 年前 |
![]() |
LOSnel · 干扰irq将我从睡眠模式唤醒 7 年前 |
![]() |
Juliano · ili9341不处理STM32f4发现 7 年前 |
![]() |
yun · USB音频缓冲区欠载 8 年前 |
![]() |
puzzled · 全球结构不起作用[关闭] 8 年前 |
![]() |
Aimal · Elf十六进制表示法 8 年前 |
![]() |
girikks · 结构值未在主源文件中更新 8 年前 |
|
user8235882 · 未在操作系统C中执行的for循环 8 年前 |