搞不定字节序,,,,,,数据全成乱码。。。。。这台缅甸14maY23_XXXXXL56endian设备我拿得手时,,,,,,以为直接接线就能用,,,,,,了局串口打印出来的数字语无伦次,,,,,,几千行的十六进造看了都想摔器材。。。。。后来才领略,,,,,,问题就出在一个叫endian的设置上。。。。。说白了,,,,,,就是字节序,,,,,,大端还是幼端,,,,,,选错了,,,,,,所罕见据都得反过来读。。。。。
这器材不懂的人感触玄乎,,,,,,其实一句话就能说透:一个多字节的数值,,,,,,好比0x12345678,,,,,,在内存里是从高位往低位存,,,,,,还是从低位往高位存。。。。。大端(Big-endian)是高位在前,,,,,,幼端(Little-endian)是低位在前。。。。。设备默认哪种,,,,,,跟它的处置器架构和出厂固件有关系,,,,,,没有统一尺度。。。。。?
先弄领略大幼端到底差在哪
拿0x12345678举例。。。。。大端模式下,,,,,,字节流是12 34 56 78,,,,,,跟人读数字的习惯一样,,,,,,从左往右。。。。。幼端模式就反过来了,,,,,,造成78 56 34 12。。。。。你若是按大端去解析一份幼端数据,,,,,,读出来的数值就是0x78563412,,,,,,差着十万八千里。。。。。
好多人在这一步就栽了。。。。。? 以为设备坏了,,,,,,或者线没接对,,,,,,其实只是字节序没匹配上。。。。。出格是这类型的设备,,,,,,数据手册上往往只写了“默认大端”或者“支持切换”,,,,,,但具体怎么切换到另一个模式,,,,,,得自己摸索。。。。。?
看清这台设备的默认状态
着手设之前,,,,,,先搞明显当前是什么状态。。。。。连上配置端口,,,,,,打开串口调试工具,,,,,,波特率按设备铭牌上标的来,,,,,,通常是9600或者115200。。。。。设备启动时通;;;;;;岽蛴∫淮舳畔ⅲ,,,,,里面会带有一个类似“Endian: Little”或者“Byte order: Big”的字样。。。。。若是你没看到,,,,,,那就发个单一的查问指令,,,,,,好比读取设备ID或寄放器地址,,,,,,而后看返回的数据。。。。。?
看数据也有技巧。。。。。若是你发的是0x0001,,,,,,设备返回的是0x0001,,,,,,那就是大端;;;;;;返回0x0100,,,,,,那就是幼端。。。。。先确认当前状态,,,,,,后面设置才对症下药。。。。。这个作为别跳过,,,,,,好多人不看直接改,,,,,,了局改完更乱了。。。。。
关键的设置步骤就这么几步
确认完近况,,,,,,接下来就是正事。。。。。这台设备的字节序设置藏在配置菜单里的“数据体式”或者“通讯参数”子菜单中。。。。。分歧批次、分歧固件版本叫法可能不一样,,,,,,有的接装Endian Mode”,,,,,,有的接装字节挨次”,,,,,,多翻翻菜单总能找到。。。。。?
进去之后,,,,,,你会看到两个选项,,,,,,Big-endian和Little-endian。。。。。选哪个????????记住一个准则:跟你的接管端维持一致。。。。。若是你接的是PLC、上位机或者传感器,,,,,,去查那些设备的和谈文档,,,,,,看它们用的是哪种字节序,,,,,,而后在这里照着选。。。。。别自己瞎定,,,,,,双方一致才是唯一的尺度。。。。。
选完之后,,,,,,肯定重点保留或者利用,,,,,,而后沉启设备。。。。。这里有个容易忽略的坑,,,,,,有的机型必须断电沉启才生效,,,,,,单纯的软复位没用。。。。。









Android版
iPhone版