0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CubeIDE生成的工程

STM32单片机 来源:STM32单片机 作者:STM32单片机 2022-07-27 09:40 次阅读

关键词:STM32CubeIDE, Heap, 堆, __sbrk

问题描述

近日接到一客户需求,其欲在 STM32CubeIDE 中指定堆(Heap)的地址到某一专用的RAM 中。

问题分析

STM32CubeIDE 生成的工程中,默认的堆栈配置示意图如图 1 所示:

c83cde7c-0d44-11ed-ba43-dac502259ad0.png

解决方法

通过 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 参数

c86028aa-0d44-11ed-ba43-dac502259ad0.png

c87dd058-0d44-11ed-ba43-dac502259ad0.png

可以看到 heap_pointer 指针通过 malloc 申请到的地址,已经指向了目标 RAM 范围内了。

注意,这里我们在 0x20001000 开始的位置申请了 10 个字节的空间,理论上heap_pointer 应当从 0x20001000 开始计算,但是由于 malloc 在申请的地址时,会占用 8个字节用来存储状态等信息,所以 heap_pointer 指针从 0x20001008 开始。这是STM32CubeIDE 使用了 newlib 库来实现 malloc 的机制所致,不影响用户的使用。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    12

    文章

    3847

    浏览量

    84640
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1315

    浏览量

    113684
  • 工程
    +关注

    关注

    0

    文章

    165

    浏览量

    27563

原文标题:工程师笔记 |STM32CubeIDE 实用技巧之配置 Heap 空间

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32CubeIDE如何能生成Lib?

    请问stm32CubeIDE如何能生成 Lib?
    发表于 04-12 07:57

    STM32CUBEIDE软件生成工程怎么使用CCRAM型号?

    求助STM32CUBEIDE软件生成工程怎么使用CCRAM 型号:STM32G474VE
    发表于 04-08 08:20

    STM32CubeMX生成stm32cubeide工程报错的原因?怎么解决?

    使用STM32CubeMX,建立了STM32F103VC的工程文件,能够生成IAR工程,正常使用没有问题。由于IAR调试时老是闪退,想换
    发表于 04-07 07:14

    STM32F427使用stm32cubeIDE生成工程,串口打印乱码的原因?

    不知道是不是时钟配置错了。。。。
    发表于 03-19 07:12

    STM32CubeIDE找不到elf

    STM32CubeIDE是STMicroelectronics公司推出的一款集成开发环境(IDE),用于开发STM32系列微控制器的应用程序。它基于Eclipse开发平台,并集成了ST的驱动程序
    的头像 发表于 01-02 16:32 537次阅读

    STM32CubeIDE实用技巧之配置Heap空间

    STM32CubeIDE实用技巧之配置Heap空间
    的头像 发表于 10-31 17:30 708次阅读
    <b class='flag-5'>STM32CubeIDE</b>实用技巧之配置Heap空间

    巧用 STM32CubeIDE 之编译警告

    巧用 STM32CubeIDE 之编译警告
    的头像 发表于 10-25 16:33 544次阅读
    巧用 <b class='flag-5'>STM32CubeIDE</b> 之编译警告

    关于STM32CubeIDE链接脚本的小问题

    电子发烧友网站提供《关于STM32CubeIDE链接脚本的小问题.pdf》资料免费下载
    发表于 09-20 11:25 0次下载
    关于<b class='flag-5'>STM32CubeIDE</b>链接脚本的小问题

    STM32CubeIDE实用技巧之ld链接文件

    电子发烧友网站提供《STM32CubeIDE实用技巧之ld链接文件.pdf》资料免费下载
    发表于 09-20 10:31 1次下载
    <b class='flag-5'>STM32CubeIDE</b>实用技巧之ld链接文件

    STM32CubeIDE实用技巧之仿真带外扩FLASH的工程

    电子发烧友网站提供《STM32CubeIDE实用技巧之仿真带外扩FLASH的工程.pdf》资料免费下载
    发表于 09-19 16:55 2次下载
    <b class='flag-5'>STM32CubeIDE</b>实用技巧之仿真带外扩FLASH的<b class='flag-5'>工程</b>

    STM32CubeIDE实用技巧之配置堆空间

    电子发烧友网站提供《STM32CubeIDE实用技巧之配置堆空间.pdf》资料免费下载
    发表于 09-19 15:07 2次下载
    <b class='flag-5'>STM32CubeIDE</b>实用技巧之配置堆空间

    STM32CubeIDE快速入门指南

    电子发烧友网站提供《STM32CubeIDE快速入门指南.pdf》资料免费下载
    发表于 09-19 14:29 6次下载
    <b class='flag-5'>STM32CubeIDE</b>快速入门指南

    应用笔记 | 建立基于STM32CubeIDE的ClassB工程

    关键字:STM32CubeIDE,ClassB   目录预览 1.前言 2.准备 3.创建CubeMX工程 4.移植过程中可能遇到的问题 5.小结 0 1 前言 大家都知道ST的ClassB功能安全
    的头像 发表于 08-24 18:15 851次阅读
    应用笔记 | 建立基于<b class='flag-5'>STM32CubeIDE</b>的ClassB<b class='flag-5'>工程</b>

    STM32F427使用stm32cubeIDE生成工程,串口打印乱码怎么解决?

    不知道是不是时钟配置错了。。。。
    发表于 08-08 08:03

    STM32CubeIDE安装指南

    电子发烧友网站提供《STM32CubeIDE安装指南.pdf》资料免费下载
    发表于 08-01 15:44 3次下载
    <b class='flag-5'>STM32CubeIDE</b>安装指南