打印
[STM32L0]

什么限制了堆栈大小?

[复制链接]
1235|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
封存into|  楼主 | 2025-5-29 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32L072中,我的项目使用了 94 %的 RAM并且需要更多堆栈存储。想增加链接器文件中的堆栈,但出现错误。
我认为 ram 中有足够的区域可以增加 Heap size(堆大小)。但是Stm32cubeide不允许增加堆栈大小。
为什么我不能将空闲内存用于堆栈?

使用特权

评论回复
沙发
磨砂| | 2025-6-6 15:41 | 只看该作者
单片机的堆栈通常设置在片内RAM中,而片内RAM的总量是有限的

使用特权

评论回复
板凳
晓伍| | 2025-6-6 17:59 | 只看该作者
如果堆栈设置过大,会占用过多的RAM资源,导致其他数据存储和程序运行所需的内存空间不足

使用特权

评论回复
地板
八层楼| | 2025-6-6 20:19 | 只看该作者
部分单片机的RAM区域中存在特殊功能寄存器,这些寄存器有其特定的用途且不能被堆栈占用。所以在规划堆栈大小时,需要避开这些SFR所在的地址空间,这也在一定程度上限制了堆栈的可用范围

使用特权

评论回复
5
观海| | 2025-6-6 22:29 | 只看该作者
当单片机发生中断时,需要将当前任务的现场信息保存到堆栈中

使用特权

评论回复
6
guanjiaer| | 2025-6-7 08:42 | 只看该作者
系统中允许的最大中断嵌套层数会影响堆栈大小的设置,需要考虑为可能的中断嵌套预留足够的堆栈空间

使用特权

评论回复
7
heimaojingzhang| | 2025-6-7 11:13 | 只看该作者
每调用一个函数,就会在堆栈中压入一些信息,如函数的参数、局部变量、返回地址等。如果函数调用层次过深,或者存在递归调用等情况,会使堆栈的使用量迅速增加

使用特权

评论回复
8
keaibukelian| | 2025-6-7 13:39 | 只看该作者
在函数中定义的局部变量通常是存储在堆栈中的,如果局部变量的数量较多或占用空间较大,会导致堆栈空间的消耗增加

使用特权

评论回复
9
paotangsan| | 2025-6-7 15:52 | 只看该作者
不同的编译器可能对堆栈大小有不同的默认设置,这些默认设置可能基于单片机的型号、内存布局等因素

使用特权

评论回复
10
renzheshengui| | 2025-6-7 18:31 | 只看该作者
链接脚本用于指定程序中各个部分在内存中的布局和地址范围

使用特权

评论回复
11
wowu| | 2025-6-7 20:45 | 只看该作者
如果链接脚本中对堆栈段的大小定义不合理,或者没有充分考虑到程序的实际需求,可能会导致堆栈空间不足或浪费

使用特权

评论回复
12
别乱了阵脚| | 2025-6-9 20:15 | 只看该作者
RAM总大小限制,STM32L072的RAM大小是固定的,堆栈大小不能超过剩余可用的RAM空间。即使看起来有“空闲”内存,也可能已经被其他内存区域(如全局变量、静态变量、堆等)占用

使用特权

评论回复
13
江河千里| | 2025-6-9 21:00 | 只看该作者
内存布局由链接脚本(Linker Script)决定,堆栈、堆、全局变量等内存区域在RAM中的分配是相互关联的。增加堆栈大小可能会与其他内存区域产生冲突

使用特权

评论回复
14
一秒落纱| | 2025-6-9 21:30 | 只看该作者
微控制器的硬件设计决定了其内存资源的总量和分配方式,无法通过软件手段突破硬件限制

使用特权

评论回复
15
远山寻你| | 2025-6-9 22:00 | 只看该作者
在尝试增加堆栈大小时,可能与其他内存区域(如堆、全局变量等)产生了冲突,导致链接器报错

使用特权

评论回复
16
暖了夏天蓝了海| | 2025-6-10 06:00 | 只看该作者
检查代码中的全局变量和静态变量,尽量减少不必要的内存占用

使用特权

评论回复
17
三生万物| | 2025-6-10 10:00 | 只看该作者
堆栈与堆的增长方向,在STM32中,堆栈通常从RAM的高地址向下增长,而堆从低地址向上增长。如果两者增长方向设置不当或空间分配不合理,可能导致“撞车”(即堆栈和堆的空间重叠),从而引发系统崩溃或链接错误。

使用特权

评论回复
18
夜阑风雨| | 2025-6-10 10:39 | 只看该作者
如果内部RAM确实不足,可以考虑使用外部RAM扩展内存空间。但这需要额外的硬件设计和软件配置

使用特权

评论回复
19
光辉梦境| | 2025-6-10 20:09 | 只看该作者
链接脚本配置错误,链接脚本中的内存配置可能不正确,导致无法正确分配堆栈空间

使用特权

评论回复
20
冰春彩落下| | 2025-6-11 12:00 | 只看该作者
修改链接脚本,重新分配堆栈、堆和其他内存区域的大小和位置。确保堆栈和堆的增长方向不会相互冲突

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

91

帖子

0

粉丝