OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1149|回复: 1

stm32f103rc 使用正点原子内存管理,一段时间后内存使用率100%

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2026-4-8
在线时间
2 小时
发表于 2026-4-9 09:42:13 | 显示全部楼层 |阅读模式
1金钱
stm32f103rc 平台下使用正点原子内存管理,采用内部flash做内存池,一段时间后(具体时间不定,有时几个小时,有时10几分钟)内存使用率100%,
除了了部分申请的内存节点需要保存,占总内存池的3%多一点,其它申请的内存节点都已调用myfree函数释放,什么原因造成内存池使用率一直100%,有遇到过的吗?

回复

使用道具 举报

0

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2026-1-29
在线时间
21 小时
发表于 2026-4-9 17:47:55 | 显示全部楼层
以下是可能的原因及解决方案分析:
一、内存管理表状态异常
现象:内存管理表(memmapbase)的项值未正确归零,导致误判内存块被占用。
分配逻辑缺陷:在 mem_malloc 函数中,若分配失败(如找不到连续空块),未正确重置临时计数器 cmemb,可能导致后续分配逻辑混乱。
释放逻辑缺陷:mem_free 函数通过 offset/memblksize 计算起始索引后,需清除连续 nmemb 个内存块的标志位。若 nmemb 取值错误(如未正确读取 mallco_dev.memmap[index] 的值),会导致部分块未被释放。
二、内存池越界访问
现象:内存池(membase)的读写操作超出预设范围,破坏内存管理表或相邻内存块。
非法地址写入:若用户代码通过指针越界写入数据,可能覆盖内存管理表或相邻内存块的管理标志位,导致内存管理表状态异常。
内存对齐问题:正点原子内存池要求4字节对齐(__align(4)),若用户代码未按对齐规则分配或访问内存,可能导致硬件异常或数据错误。
三、Flash存储器特性引发的隐性问题
现象:内部Flash作为内存池时,因擦写寿命或访问延迟导致数据异常。
Flash写入前未擦除:Flash的写入操作要求目标地址的数据必须为 0xFFFF,否则写入失败。若内存管理模块未正确擦除整页,可能导致写入数据错误,进而破坏内存管理表。
缓存一致性问题:STM32的Flash接口寄存器(如 FLASH_ACR)需配置等待周期(Wait State)。若主频较高(如72MHz)且未启用预取缓冲,可能导致读取内存管理表时发生总线错误。
四、多线程/中断竞争导致的内存管理紊乱
现象:在多任务或中断嵌套场景下,内存分配/释放操作被打断,导致内存管理表状态不一致。
非原子操作:mem_malloc 和 mem_free 函数中的查表、标记操作未加互斥锁,若被高优先级中断打断,可能导致内存管理表项被错误修改。
重入问题:若内存管理函数(如 mymalloc)被递归调用或在不同任务中并发调用,可能破坏栈结构或内存管理表。
五、内存池容量规划不足
现象:内存池实际需求超过预设的 MEM_MAX_SIZE,导致频繁分配失败。
估算偏差:若用户代码中存在内存泄漏(如未释放的临时变量)或内存复用策略不合理(如缓存未及时清理),可能导致实际内存需求动态增长,最终超出内存池容量。
六、调试建议与解决方案
内存管理表校验:在关键操作前后打印内存管理表状态(如 memmapbase 数组),确认分配/释放流程是否符合预期。
边界测试:编写压力测试代码,模拟高频分配/释放操作,观察内存使用率变化趋势。
硬件辅助调试:使用逻辑分析仪监测SPI总线(若内存池位于外部Flash)或添加GPIO引脚标记内存操作时刻,定位异常时间点。
优化内存池位置:若性能允许,可将频繁分配的内存池迁移至SRAM(需修改 membase 定义),避免Flash写入延迟对实时性的影响。
增加冗余校验:在内存管理表中加入CRC校验字段,定期检查表完整性。
综上,该问题大概率由内存管理表状态异常或多线程竞争导致。建议优先排查 mem_free 函数的逻辑完整性,并在关键操作前后添加日志输出,结合硬件调试工具定位具体故障点。

回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-5-16 15:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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