291 字
1 分钟
字节大端序小端序的问题

实验现象#

同步图片是这个 alt text

实际上屏幕显示 alt text

问题原因#

像素数据
0000 0001 0002 0003 0004 0005 0006 0007 0008
生成的指令数据
0A02000000010002000300040005000600070008

在设备端使用代码

memcpy(&buf, data+2, 18);

由于设备端使用的是小端序,所以需要将数据转换为大端序。 因此需要将数据转换为大端序,正确的指令数据应该是:

uint16_t pixel = (data[2+i] << 8) | data[3+i];
buf[offest+i] = pixel&0xFF;
buf[offest+i+1] = (pixel>>8)&0xFF;

常见情况#

NOTE

在LVGL中也有类似的设置项 即为像素的swap选项 一定记得注意统一😂

处理器架构默认字节序说明
ARM(Cortex-M)小端序Cortex-M(如 STM32、NRF52)等低功耗微控制器常用小端序。
ARM Cortex-A 也通常默认小端,但可以配置成大端。
MIPS可配置,但多数是小端序某些嵌入式设备或老旧网络设备可能使用大端。
PowerPC多为大端序早期嵌入式和网络设备中常见。现在较少使用。
RISC-V小端序默认小端序,也支持大端(但很少用)。
x86(Intel)小端序工业控制或嵌入式PC中常见。
字节大端序小端序的问题
https://blog.zyfang.top/posts/toothbrush/字节大端序小段序问题/
作者
Fang
发布于
2025-04-01
许可协议
CC BY-NC-SA 4.0