STM32CubeIDE实用技巧之配置Heap空间

问题描述
近日接到一客户需求,其欲在 stm32cubeide 中指定堆(heap)的地址到某一专用的ram 中。
问题分析
stm32cubeide 生成的工程中,默认的堆栈配置示意图如图 1 所示:
解决方法
通过 stm32cubeide 生成的工程中,会默认生成 sysmem.c。这个文件中的
__sbrk_heap_end 指针默认赋值为 null,我们只需要更改这个指针为目标地址即可达到期望。
例如:默认配置是“static uint8_t *__sbrk_heap_end = null;”我们希望将堆的地址分配到 0x20001000 为起始的空间上,可以这样做:
“static uint8_t *__sbrk_heap_end = (uint8_t*)0x20001000;”
注意:由于堆(heap)向上增长,栈(stack)向下增长,所以在手动更改堆的起始地址时,如果定义的堆和栈空间存在重叠区域,stm32cubeide 无法识别这种情形,用户应当避免这样的设置。
验证
在 stm32cubeide 生成的串口打印的工程,然后按照上面示例修改 sysmem.c 中的__sbrk_heap_end 参数。
可以看到 heap_pointer 指针通过 malloc 申请到的地址,已经指向了目标 ram 范围内了。
注意,这里我们在 0x20001000 开始的位置申请了 10 个字节的空间,理论上heap_pointer 应当从 0x20001000 开始计算,但是由于 malloc 在申请的地址时,会占用 8个字节用来存储状态等信息,所以 heap_pointer 指针从 0x20001008 开始。这是stm32cubeide 使用了 newlib 库来实现 malloc 的机制所致,不影响用户的使用。
来源:stm32单片机


MS-DETR和其他SOTA方法的对比
糖果猫手机应用试玩平台 下载APP赚取广告分成
Ikanos与picoChip共同推进家庭基站市场
液晶面板国产化加速,和成显示未来三年仍将持续受益
AWE 2023上海展直击:康盈半导体全明星阵容亮相 智慧生活芯场景备受关注
STM32CubeIDE实用技巧之配置Heap空间
全屏指纹识别或将是屏下指纹识别突破的关键
基于赛灵思VCU118开发板随附的 UltraScale+ 器件
压缩机的工作原理
基于虚拟仪器LabVIEW软件实现PID控制器远程监控系统的设计
什么是DCS?DCS和PLC控制器的差别分析
智慧养老5G+蓝牙+GPS/北斗RTK人员定位系统解决方案解析
大气在线监测设备产品特点介绍
预计半导体行业降幅-66.5%,三星电子营业利润将逆势增长
自镇流LED灯使用注意事项
给你5000块, 买华为P10还是iPhone7?
VueReal宣布倒装芯片Micro LED结构研究获得突破
招商银行科技办公室是如何朝区块链发力的
密封性测试设备有什么作用?
跟踪领先AV软件平台,探究其合作伙伴、AV 用例和其他有价值的信息