- 打卡等级:以坛为家III
- 打卡总天数:815
- 最近打卡:2026-07-05 00:08:16
荣誉版主
- 积分
- 4844
|
发表于 2026-6-18 09:22:31
|
显示全部楼层
不好意思把字节理解成位了 >_<||||||
根据AI助手的总结,QSPI_DMA_P2P是流水线式传输,读1个发1个。所以没法在这个过程中交换字节。
AI助手提供了几种解决方案,总结如下:
1、用新的顺序重新对图片取模
如果没有原图了,这个方法就不好用了。
2、先预处理一下图片数据(推荐)
(1) 提前把每个数据的高低字节交换完再写入flash;
(2) 或者把flash里的数据提前读出来交换完再写回去。
这是交换字节的思路,buff是要处理的数组,num是要处理的字节数
void BytesReverse( unsigned char *buff, unsigned char num )
{
unsigned char temp, i;
for( i=0; i<num; i+=2 )
{
temp = *(buff+i);
*(buff+i) = *(buff+i+1);
*(buff+i+1) = temp;
}
}
比如 aaa[6]= { 0x01, 0x02, 0x12, 0x34, 0x00, 0xFF };
执行 BytesReverse( aaa, 6 ); 之后
就变成 aaa[6]= { 0x02, 0x01, 0x34, 0x12, 0xFF, 0x00 }; 了。
如果数据不多,可以直接在内存里做交换操作;如果数据量过大,可以分批交换。
3、放弃P2P,使用缓冲区进行交换
从flash取出来的数据放进缓冲区数组,用上面的函数思路进行交换,然后再发送给屏幕。
缺点是效率下降了,而且占用额外的内存。
4、根据其它AI的提议,看使用的屏幕有没有指定数据顺序的配置
根据常见的彩屏的说明文档,都只有像素显示的方向设置,而接收数据的顺序都是[bit15→bit0],没有改变解析顺序的指令,所以不适用。
|
|