会飞的鱼苗 发表于 2025-4-12 09:27:55

tft使用xdata申请了array[49960]的大小的数组 数据显示不正确

<p><img src="data/attachment/forum/202504/12/092423ze20texbimmbbyx6.jpg" alt="0240c4c97db58564a254fdf7b67ffb6a.jpg" title="0240c4c97db58564a254fdf7b67ffb6a.jpg" /></p>
<p>使用xdata声明了大小的数据 就显示不正确,如果将数组换到code区不使用dma的情况下数据正常,使用dma就乱码。<a href="forum.php?mod=attachment&amp;aid=92837" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:lcm_dam (3).zip</a></p>

国芯人工智能 发表于 2025-4-12 09:28:00

针对您提到的TFT显示数据不正确的问题,结合您提供的信息,以下是一些可能的原因及解决方案:

1. XData区与DMA的兼容性问题
问题分析:您提到使用xdata声明数组时,数据显示不正确,而将数组换到code区后数据正常。这表明问题可能与xdata区的访问方式或DMA传输过程中的数据完整性有关。
解决方案:
检查DMA配置:确保DMA的源地址、目标地址、传输长度等参数配置正确。特别是源地址应指向xdata区的正确位置。
数据对齐:某些DMA控制器对数据对齐有严格要求。确保xdata区的数组地址和长度符合DMA的要求。
DMA传输模式:检查DMA的传输模式(如单次传输、循环传输等)是否适合您的应用场景。

2. XData区的访问速度
问题分析:xdata区的访问速度通常比code区慢,如果DMA传输速率过高,可能导致数据读取不及时,从而显示不正确。
解决方案:
降低DMA速率:尝试降低DMA的传输速率,确保xdata区的数据能够及时被读取。
优化内存访问:如果可能,优化xdata区的访问方式,例如使用缓存或预取技术。

3. 数据缓冲区溢出或覆盖
问题分析:DMA传输过程中,如果数据缓冲区被意外覆盖或溢出,可能导致数据显示不正确。
解决方案:
检查缓冲区大小:确保xdata区的数组大小足够容纳DMA传输的数据。
同步机制:在DMA传输完成后,确保数据被正确读取和处理,避免数据被覆盖。

4. 硬件或驱动问题
问题分析:硬件故障或驱动程序的bug也可能导致数据显示不正确。
解决方案:
更新驱动程序:确保使用的驱动程序是最新版本,修复已知的bug。
硬件检查:检查TFT显示屏和连接线路,确保硬件工作正常。

5. 调试与验证
问题分析:通过调试工具可以更直观地发现问题所在。
解决方案:
使用调试工具:通过调试工具(如逻辑分析仪、示波器等)监控DMA传输过程,检查数据传输的完整性和正确性。
逐步验证:将问题分解为多个小步骤,逐步验证每个步骤的正确性,缩小问题范围。

6. 代码优化
问题分析:代码中的某些优化可能导致数据读取或传输出现问题。
解决方案:
代码审查:仔细审查代码,特别是与xdata区和DMA相关的部分,确保没有逻辑错误。
简化代码:尝试简化代码,去除不必要的优化,逐步排查问题。

7. 附件分析
问题分析:您提供的附件lcmdam (3).zip可能包含更多细节信息。
解决方案:
详细分析附件:通过分析附件中的代码和配置文件,进一步定位问题。

综上所述,建议您从DMA配置、xdata区访问速度、数据缓冲区、硬件驱动、调试工具和代码优化等多个方面进行排查和验证,逐步定位并解决问题。如果问题依然存在,建议提供更多详细信息或代码片段,以便进一步分析。

[本文内容由国芯人工智能辅助生成,仅供参考]

神农鼎 发表于 2025-4-12 10:15:56

xdata, 具体哪个芯片,多大的容量 ?

DebugLab 发表于 2025-4-12 11:11:53

标题49960与正文40960不一致
按40960计算,是40K
最大容量的AI8051U是34K内存
是不是无外挂SRAM芯片
xdata超出范围了

会飞的鱼苗 发表于 2025-4-15 10:34:37

我改成小图标以后,传输完成会多几个像素点是乍回事啊

ercircle 发表于 2025-4-15 10:38:00

会飞的鱼苗 发表于 2025-4-15 10:34
我改成小图标以后,传输完成会多几个像素点是乍回事啊

看下是不是内存对齐问题
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=16306

会飞的鱼苗 发表于 2025-4-15 10:44:55

DebugLab 发表于 2025-4-12 11:11
标题49960与正文40960不一致
按40960计算,是40K
最大容量的AI8051U是34K内存


确实是超了,换小图标就能显示120*120

会飞的鱼苗 发表于 2025-4-15 13:09:35

ercircle 发表于 2025-4-15 10:38
看下是不是内存对齐问题
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=16306

没有用,还是会有数据覆盖

会飞的鱼苗 发表于 2025-4-15 13:15:48

开始的数据应该是16个 蓝色的像素点的,后来就变成了其他数据,结尾的数据是黄的16像素没有问题

ercircle 发表于 2025-4-15 13:42:22

会飞的鱼苗 发表于 2025-4-15 13:15
开始的数据应该是16个 蓝色的像素点的,后来就变成了其他数据,结尾的数据是黄的16像素没有问题 ...

看着像发的数据超过了一屏数据量,黄色的覆盖到起始位置去了。发一半试试
页: [1] 2
查看完整版本: tft使用xdata申请了array[49960]的大小的数组 数据显示不正确