[其他ST产品] STM32做点阵LCD程序然后数据区爆了,求解决

[复制链接]
 楼主| 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卡),可以考虑将部分数据存储在外部存储器中。
powerantone 发表于 2024-7-26 21:11 | 显示全部楼层
优化显示逻辑
stormwind123 发表于 2024-7-26 21:12 | 显示全部楼层
仔细审查你的代码,查找任何不必要的数据复制或重复存储。
probedog 发表于 2024-7-26 21:12 | 显示全部楼层
如果可能,对存储在RAM或外部存储器中的图像数据进行压缩。在发送到LCD之前,再解压这些数据。
classroom 发表于 2024-7-26 21:12 | 显示全部楼层
如果STM32支持DMA,并且你的LCD控制器也支持DMA传输,那么使用DMA可以显著提高数据传输的效率,并减少CPU的负载。
七毛钱 发表于 2024-7-26 21:13 | 显示全部楼层
硬件升级
公羊子丹 发表于 2025-2-9 09:10 | 显示全部楼层
这种情况应该是静态数据段超出了RAM容量,你的STM32芯片总RAM有多大?
周半梅 发表于 2025-2-9 09:12 | 显示全部楼层
可以在链接脚本里修改.data段和.bss段的大小配置,你找到.ld文件了吗?
帛灿灿 发表于 2025-2-9 09:13 | 显示全部楼层
如果RAM不够用,可以考虑把大数组改为动态分配或者存在外部Flash中。
童雨竹 发表于 2025-2-9 09:14 | 显示全部楼层
你是不是直接用了全局数组来存LCD点阵数据?建议用DMA按需刷写部分屏幕数据。
万图 发表于 2025-2-9 09:15 | 显示全部楼层
还有个方案是把一些不常用的常量数据放到Flash里,减轻RAM的压力。
Wordsworth 发表于 2025-2-9 09:16 | 显示全部楼层
我记得CubeMX可以自动生成链接脚本配置,你可以先生成看看.ld文件内容。
Bblythe 发表于 2025-2-9 09:17 | 显示全部楼层
STM32的大部分片子RAM有限,如果点阵数据太大,可以考虑用外部RAM。
Pulitzer 发表于 2025-2-9 09:19 | 显示全部楼层
看看堆栈配置,适当缩小堆栈也能挤出一部分空间给全局变量。
Uriah 发表于 2025-2-9 09:20 | 显示全部楼层
建议用malloc动态分配数据区,虽然管理麻烦,但能更灵活利用内存。
Clyde011 发表于 2025-2-9 09:21 | 显示全部楼层
你试过在编译器里打开内存使用分析工具吗?能帮助找到内存爆掉的原因。
中国龙芯CDX 发表于 2025-2-9 14:23 | 显示全部楼层
数据区爆了是如何做到的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1448

主题

4810

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部