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 的机制所致,不影响用户的使用。

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

    关注

    13

    文章

    4693

    浏览量

    89567
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1398

    浏览量

    119817
  • 工程
    +关注

    关注

    0

    文章

    168

    浏览量

    29678

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32CubeIDE使用教程

    内容详细,适合转向STM32CubeIDE,它免费,没有代码容量限制
    发表于 09-02 16:16 5次下载

    意法半导体:STM32CubeMX将不再集成到STM32CubeIDE

    从2025年11月发布的版本开始,我们将仅以 独立 版本的形式提供 STM32CubeIDESTM32CubeMX 。 STM32CubeMX将不再集成到STM32CubeIDE
    的头像 发表于 09-01 17:18 2630次阅读

    stm32cubeIDE使用malloc失败是什么原因?

    我在stm32cubeIDE环境下,已经分配了足够的栈与堆空间,但是我在的使用malloc分配内存时,一直分配不成功,这是什么原因?
    发表于 06-09 07:24

    请问STM32CubeIDE能直接在软件中升级吗?

    STM32CubeIDE能直接在软件中升级吗?
    发表于 06-06 07:40

    stm32cubeIDE使用malloc失败是什么原因?

    我在stm32cubeIDE环境下,已经分配了足够的栈与堆空间,但是我在的使用malloc分配内存时,一直分配不成功,这是什么原因?
    发表于 06-04 07:18

    请问STM32CubeIDE能直接在软件中升级吗?

    STM32CubeIDE能直接在软件中升级吗?
    发表于 05-14 06:06

    请问STM32CubeIDE能直接在软件中升级吗?

    STM32CubeIDE能直接在软件中升级吗?
    发表于 04-27 08:42

    stm32cubeIDE使用malloc失败的原因?

    我在stm32cubeIDE环境下,已经分配了足够的栈与堆空间,但是我在的使用malloc分配内存时,一直分配不成功,这是什么原因?
    发表于 04-27 06:45

    最新版STM32CubeIDE无法安装怎么解决?

    最新版STM32CubeIDE无法安装,这应该如何解决,已用管理员身份运行
    发表于 04-27 06:20

    使用STM32CubeIDE调试STM32MP157D的M4内核时报了错误怎么解决?

    我使用STM32CubeIDE调试STM32MP157D的M4内核时报了下图这个错误: 经过我的排除后发现,应该是STM32CubeIDE上传"
    发表于 03-14 06:01

    STM32CubeIDE在线调试时,如何配置擦除Flash的部分Page?

    STM32CubeIDE在线调试时,如何配置擦除Flash的部分Page
    发表于 03-13 08:02

    STM32CubeIDE为什么无法生成工程和代码?

    各位大佬好,我是一名新手小白,当我在使用STM32CubeIDE时,出现了1图弹窗,显示我缺少必要固件包,而导致我无法生成工程和代码,但我已经正常登录,且在创建工程
    发表于 03-12 06:00

    请问STM32CUBEIDE如何开启代码联想功能?

    STM32CUBEIDE如何开启代码联想功能?
    发表于 03-10 08:23

    stm32cubeide编译的时候报错,无法生成hex文件怎么解决?

    stm32cubeide编译的时候报错,并且无法生成hex文件怎么办急急急!
    发表于 03-07 08:17

    STM32CubeIDE 1.17.0用MX配置好芯片后不能生成代码是怎么回事?

    请问各位,我昨天下的STM32CubeIDE 1.17.0的用MX配置好芯片后不能生成代码。左侧文件区就只有一个.ico的文件。
    发表于 03-07 06:52