tim4146 发表于 2016-7-7 21:05:01

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

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

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


但是通过 result=CRC低16位 获得的result是 0x7c0b。
感觉这真的很麻烦。难道以后以后度一个超过16位寄存器 或者32位寄存器都不能直接读么?小端模式有什么好处呢?编程的时候大家是怎么注意的,有什么好的办法能避免自己出错吗?
页: [1]
查看完整版本: 关于K60 CRC16和大小端模式的疑问