找回密码
 立即注册
查看: 716|回复: 13

DMA_LCM/TFT 疑问上报 | 强制4字节对齐

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2025-3-17 10:44:47 | 显示全部楼层 |阅读模式
问题描述:DMA_LCM/TFT   疑问上报
型号:AI8051U  使用DMA_LCM外设, 8位数据,I8080模式。

如何发现的问题: 最先一切工作正常,后来添加了一个全局变量后,显示数据变乱了,代码如下:
截图202503171020435486.jpg

代码说明: Hub_Buffer[] 是DMA发送数据池,  变量ABCDD是一个无用的变量,只有定义没有使用
当删除当 第42行: u8 xdata ABCDD;  程序运行正常
添加42行,屏就乱码。

因为代码正在起步除段,代码量不大,反复查找了代码中可能存在的BUG,或指针乱飞等,都没找到问题。
其中尝试了降低C编译优化等级,无用。

仔细分析了一下,定义一个无用变量就可以改变结果,会不会和数据池定位有关系?

打开编译后的MAP分析, 发现:
Hub_Buffer 定位在:   0001000DH   SYMBOL    XDATA    ---       Hub_Buffer   

注销42行后:
Hub_Buffer 定位在:   0001000CH   SYMBOL    XDATA    ---       Hub_Buffer

然后就想到了DMA会不会要4字节对齐?
于是又改了代码:
static u8 xdata Hub_Buffer[Hub_Buffer_Size] _at_ 0x000C;    //使用绝对定位
或:
static u8 xdata Hub_Buffer[Hub_Buffer_Size] __attribute__((aligned (4)));   //强制4字节对齐


最后发现这两种方法都可以正常运行。
那问题来了,DMA_LCM的数据池真有有必要4字节对齐吗。 如果是,那说手册上就要说明一下。
另外我试了UART_DMA的数据池并不需要4字节对齐也能正常运行.

因为代码为用LCM_DMA 驱动的屏为非常用型号,发上来大家也没办法实测,所以就不发代码了



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-17 11:01:45 | 显示全部楼层
要正确设置发送地址
截图202503171056423870.jpg
一般使用DMA时,要用 _at_ 手动指定地址
如:unsigned char xdata ***[***] _at_ 0x****
全局变量不需要加static

点评

加static 就仅限本文使用,和这个没有关系。 另外 加_at_ 没有作用, 比如: [attachimg]88173[/attachimg] 第54行,55行,运行结果正确, 56行加了_at_ 仍然不行,现在重点不是加不加 _at_ , 重点是是否需要  详情 回复 发表于 2025-3-17 11:21
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2025-3-17 11:21:52 | 显示全部楼层
Debu*** 发表于 2025-3-17 11:01
要正确设置发送地址

一般使用DMA时,要用 _at_ 手动指定地址

加static 就仅限本文可直接访问,和这个没有关系。
另外 加_at_ 没有作用,
比如:
截图202503171119236322.jpg

第54行,55行,运行结果正确,
56行加了_at_ 仍然不行,现在重点不是加不加 _at_   ,

重点是是否需要4字节对齐! 我尝试了多次了, 不如有空时你随变找个屏试一下看看?

点评

不行就可能需要字节对齐,先试试双字节对齐,再不行就四字节对齐  详情 回复 发表于 2025-3-17 11:25
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-17 11:25:38 | 显示全部楼层
tzz1*** 发表于 2025-3-17 11:21
加static 就仅限本文可直接访问,和这个没有关系。
另外 加_at_ 没有作用,
比如:

不行就可能需要字节对齐,先试试双字节对齐,再不行就四字节对齐

点评

双字节没用,四字节有用,所以我就是提醒这个问题,是不是要验证+公布,其实我自己已解决  详情 回复 发表于 2025-3-17 11:27
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2025-3-17 11:26:27 | 显示全部楼层
我很有感觉,这个黑天鹅大概率是和片内硬件设有关系的,只是不巧被我遇到了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2025-3-17 11:27:43 | 显示全部楼层
Debu*** 发表于 2025-3-17 11:25
不行就可能需要字节对齐,先试试双字节对齐,再不行就四字节对齐

双字节没用,四字节有用,所以我就是提醒这个问题,是不是要验证+公布,其实我自己已解决

点评

内部人员回复: LCM的DMA好像需要进行对齐,其它DMA缓冲区我记得没有字节对齐问题。  详情 回复 发表于 2025-3-17 12:17
感觉这些新功能在数据手册中介绍的不是很详细,我也很想知道这些细节问题 比如I2S相关的细节问题: https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=16304&pid=152898  详情 回复 发表于 2025-3-17 11:48
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-17 11:48:26 | 显示全部楼层
tzz1*** 发表于 2025-3-17 11:27
双字节没用,四字节有用,所以我就是提醒这个问题,是不是要验证+公布,其实我自己已解决 ...

之前写程序指定的DMA首地址一般都是4字节对齐的,没发现过这个问题,这个稍后向内部反馈一下
感觉这些新功能在数据手册中介绍的不是很详细,我也很想知道这些细节问题
比如I2S相关的细节问题就有很多不太清楚的:
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=16304&pid=152898



DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-17 12:17:39 | 显示全部楼层
tzz1*** 发表于 2025-3-17 11:27
双字节没用,四字节有用,所以我就是提醒这个问题,是不是要验证+公布,其实我自己已解决 ...

内部人员回复:
LCM的DMA好像需要进行对齐,其它DMA缓冲区我记得没有字节对齐问题。

点评

好的,感谢解答! 对于代码起步阶段,这个很重要, 幸好我一开始的时候是正常的, 要不误以为是哪个基础寄存器没设置对, 那就会花很多无用功去查找问题了, 甚至一开始就不成功,会直接造成挫败感  详情 回复 发表于 2025-3-17 12:35
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2025-3-17 12:35:05 | 显示全部楼层
Debu*** 发表于 2025-3-17 12:17
内部人员回复:
LCM的DMA好像需要进行对齐,其它DMA缓冲区我记得没有字节对齐问题。 ...

好的,感谢解答!
对于代码起步阶段,这个很重要,
幸好我一开始的时候是正常的,
要不误以为是哪个基础寄存器没设置对,
那就会花很多无用功去查找问题了,
甚至一开始就不成功,会直接造成挫败感
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-3-17 22:22:12 | 显示全部楼层

截图202503172221568394.jpg


截图202503172221116421.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:25 , Processed in 0.200719 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表