打印
[其他ST产品]

STM32做点阵LCD程序然后数据区爆了,求解决

[复制链接]
752|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2024-7-26 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因选了STM32的片子纯做点阵LCD程序,定义的全局变量数组将数据区承爆了,一启动直接报硬件错误。
看了下.s的启动文件只有栈空间和堆空间的配置,全局变量静态数据区的配置在哪?没找到,怎么修改增大,默认是多大,完全没有信息啊。

使用特权

评论回复
沙发
海滨消消| | 2024-7-26 21:10 | 只看该作者
检查并优化你的数据结构,比如使用更紧凑的数据格式来存储像素数据。
尽可能使用位操作来减少数据存储空间的需求。

使用特权

评论回复
板凳
laocuo1142| | 2024-7-26 21:11 | 只看该作者
减少全局和静态变量

使用特权

评论回复
地板
flycamelaaa| | 2024-7-26 21:11 | 只看该作者
如果STM32有外部存储器接口(如SPI, I2C连接的外部SRAM或SD卡),可以考虑将部分数据存储在外部存储器中。

使用特权

评论回复
5
powerantone| | 2024-7-26 21:11 | 只看该作者
优化显示逻辑

使用特权

评论回复
6
stormwind123| | 2024-7-26 21:12 | 只看该作者
仔细审查你的代码,查找任何不必要的数据复制或重复存储。

使用特权

评论回复
7
probedog| | 2024-7-26 21:12 | 只看该作者
如果可能,对存储在RAM或外部存储器中的图像数据进行压缩。在发送到LCD之前,再解压这些数据。

使用特权

评论回复
8
classroom| | 2024-7-26 21:12 | 只看该作者
如果STM32支持DMA,并且你的LCD控制器也支持DMA传输,那么使用DMA可以显著提高数据传输的效率,并减少CPU的负载。

使用特权

评论回复
9
七毛钱| | 2024-7-26 21:13 | 只看该作者
硬件升级

使用特权

评论回复
10
公羊子丹| | 2025-2-9 09:10 | 只看该作者
这种情况应该是静态数据段超出了RAM容量,你的STM32芯片总RAM有多大?

使用特权

评论回复
11
周半梅| | 2025-2-9 09:12 | 只看该作者
可以在链接脚本里修改.data段和.bss段的大小配置,你找到.ld文件了吗?

使用特权

评论回复
12
帛灿灿| | 2025-2-9 09:13 | 只看该作者
如果RAM不够用,可以考虑把大数组改为动态分配或者存在外部Flash中。

使用特权

评论回复
13
童雨竹| | 2025-2-9 09:14 | 只看该作者
你是不是直接用了全局数组来存LCD点阵数据?建议用DMA按需刷写部分屏幕数据。

使用特权

评论回复
14
万图| | 2025-2-9 09:15 | 只看该作者
还有个方案是把一些不常用的常量数据放到Flash里,减轻RAM的压力。

使用特权

评论回复
15
Wordsworth| | 2025-2-9 09:16 | 只看该作者
我记得CubeMX可以自动生成链接脚本配置,你可以先生成看看.ld文件内容。

使用特权

评论回复
16
Bblythe| | 2025-2-9 09:17 | 只看该作者
STM32的大部分片子RAM有限,如果点阵数据太大,可以考虑用外部RAM。

使用特权

评论回复
17
Pulitzer| | 2025-2-9 09:19 | 只看该作者
看看堆栈配置,适当缩小堆栈也能挤出一部分空间给全局变量。

使用特权

评论回复
18
Uriah| | 2025-2-9 09:20 | 只看该作者
建议用malloc动态分配数据区,虽然管理麻烦,但能更灵活利用内存。

使用特权

评论回复
19
Clyde011| | 2025-2-9 09:21 | 只看该作者
你试过在编译器里打开内存使用分析工具吗?能帮助找到内存爆掉的原因。

使用特权

评论回复
20
中国龙芯CDX| | 2025-2-9 14:23 | 只看该作者
数据区爆了是如何做到的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1376

主题

4321

帖子

0

粉丝