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

    文章

    4897

    浏览量

    90295
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1401

    浏览量

    121024
  • 工程
    +关注

    关注

    0

    文章

    170

    浏览量

    29837

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LAT1621_STM32N6 在 PSRAM 上运行代码的调试

    STM32N657X0H3Q。客户的代码很大,不能放在SRAM 上运行,想放在 PSRAM 上去运行,并咨询如何在 STM32CubeIDE 上进行调试。
    发表于 03-11 10:44 0次下载

    常见 MCU 开发环境对比:Keil、IAR、VS Code 该选谁?

    开发环境对比表,帮助你快速掌握。01STM32系列主要IDE:STM32CubeIDE、KeilMDK、IAREWARM特点:官方支持STM32CubeMX生成
    的头像 发表于 01-09 19:03 2013次阅读
    常见 MCU 开发环境对比:Keil、IAR、VS Code 该选谁?

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

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

    求助,关于NanoEdge AI Studio生成的库交叉编译器版本疑问求解

    20231009\", 那么问题来了,怎么在NanoEdge AI Studio设定交叉编译器呢,比如设置为armcc、armclang、iccram,因为我需要将库加到keil或者iar工程里面。 看样子这个软件生成的库是arm-gcc编译的,那它只能用于官方的
    发表于 08-08 07:25

    关于STMCubeIDE创建工程BUG怎么解决?

    问题描述 当在STM32CubeIDE中创建一个新的STM32项目时,"STM32Cube"单选按钮可能会变得无反应,阻止产品选择屏幕后的“下一步”按钮。这妨碍了
    发表于 08-08 06:59

    stm32cubeide官网账号登录一直显示登录失败是怎么回事?

    stm32cubeide官网下载软件需要登录账号,今天突然登录不了,且不能找回密码。
    发表于 07-23 07:52

    CubeIDE生成MP257的M33工程出现RCC配置问题怎么解决?

    我在Ubuntu虚拟机环境下运行CubeIDE1.17.0,尝试通过ioc配置MP257DAK3的M33程序,然而生成代码时,出现该问题: Main Config
    发表于 07-11 06:53

    STM32CubeIDE报错编译STM32MP135(Projects\\STM32MP135C-DK\\External_Loader)的原因?

    _1.18.1/STM32CubeIDE/plugins
    发表于 07-11 06:19

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

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

    安装STM32CUBEIDE时提示Error launching installer,为什么?

    安装STM32CUBEIDE时提示Error launching installer,我的电脑设置的是中文简体,杀毒软件也推出了,怎么才能安装软件?
    发表于 06-18 06:06

    请问stm32cubeide中如何查看版本日志?

    stm32cubeide中如何查看版本日志?看能支持哪些芯片型号?
    发表于 06-09 07:44

    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