关于K60 CRC16和大小端模式的疑问

2020-02-11 10:02发布

最近在K60编程的过程中涉及到了一些关于十六位整形数存储的问题,然后发现地址由低到高,分别存储了16位数的 低8位和高8位
然后就接触到了大端模式 小端模式的知识了。

因为在做ModBus相关的功能,一串地址里面的数据有的是按照字节读取  有的是字(2字节),有的是双字(4字节),所以编程也非常注意这个问题,然而在CRC16的计算方面,还是出错了:
CRC16 不停给寄存器写入数据之后,最后读出来的就是CRC的校验值了,由于是CRC16,所以读取的就是 寄存器的低16位,即 result=CRC低16位。然后发现这个读出来的值高低8位和理论的正确校验值是反的...
比如,通过计算,01 01 00 00 00 03 的CRC ModBus的校验结果是 0x0B7C  如图
QQ截图20160707210832.png (25.73 KB, 下载次数: 0) 下载附件 2016-7-7 21:02 上传

但是通过 result=CRC低16位 获得的result是 0x7c0b。
感觉这真的很麻烦。难道以后以后度一个超过16位寄存器 或者32位寄存器都不能直接读么?小端模式有什么好处呢?编程的时候大家是怎么注意的,有什么好的办法能避免自己出错吗?
0条回答

一周热门 更多>