注:在做实验的过程中从机返回给主机的温湿度数据是反的,不是我们需要的,没有达到我们预期的效果,如何解决这个问题?涉及到单片机的大小端问题?在Modbus协议中应该是高字节在前面低字节在后面(但是我们实现的代码却恰恰相反),如何解决这个问题。
什么是大小端
大小端指的是是在存储器中存储数据的字节顺序;在这里要记住是“字节的顺序”,因为在计算机系统中,是以字节为单位的;
C语言中除了8bit的char类型,还有16bit的short类型、32bit的long类型,对于超过8bit的数据的存储,必然存在如何将多个字节排序的问题,因此就导致了大端存储模式和小端存储模式;
如果系统是大端,则首先存储 MSB 字节,即高字节存储在低地址;若是小端,则首先存储LSB字节,即低字节存储在低地址;
ARM单片机默认是“小端模式” 低字节存储在低地址;
假设,需要存储的32bit的数据为:0x11223344,11是高字节,44是低字节:
注:对于大端模式首先存储的是高字节,也就是高字节存储在低地址,如果是小端存储,首先存储低字节,低字节存储的低地址
注:ARM单片机的存储模式是小端模式,低地址存储的是低字节,高地址存储的是高字节
大端小端问题的修改
Modbus 调试工具
注:这是是一个Modbus poll的调试工具,类似于串口调试助手,“可以在PC机上模拟出来一个Modbus的主机”,可以去下载了解使用