291 字
1 分钟
字节大端序小端序的问题
实验现象
同步图片是这个

实际上屏幕显示

问题原因
像素数据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中常见。 |