最近在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位寄存器都不能直接读么?小端模式有什么好处呢?编程的时候大家是怎么注意的,有什么好的办法能避免自己出错吗?
一周热门 更多>