打印
[AI]

STM32在KEIL下的工程堆空间在起始地址在哪里体现?

[复制链接]
1013|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2024-1-26 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上面红色标记 STACK 的起始地址为 0x2000be28
在这里有几个疑问:
1、栈空间是向低字节地址方向生长的,我定义的栈空间为16K Bytes,那么栈空间从 0x2000be28 地址向下生长,怎么会跟全局变量的地址write_data_buf 0x2000ba28 的地址重合呢?
2、还有个疑问,就是堆空间在起始地址在哪里体现?我定义的堆空间大小为512字节?

使用特权

评论回复
沙发
laocuo1142| | 2024-1-29 10:17 | 只看该作者
链接脚本文件(.lcf 或 .uvprojx)中

使用特权

评论回复
板凳
laocuo1142| | 2024-1-29 10:18 | 只看该作者
如果你想要修改堆的起始地址,你需要修改链接脚本文件,并确保其他代码和数据段不会与新的堆地址冲突。

使用特权

评论回复
地板
月亮一键变蓝| | 2024-2-16 20:31 | 只看该作者
一般堆栈地址的设置都是在启动文件部分

使用特权

评论回复
5
失物招領| | 2024-2-16 23:00 | 只看该作者
在Keil μVision中,STM32微控制器的工程堆空间的起始地址通常是在链接脚本文件(.scatter文件)中进行定义

使用特权

评论回复
6
zwsam| | 2024-2-16 23:05 | 只看该作者

使用特权

评论回复
7
将爱藏于深海| | 2024-2-17 01:00 | 只看该作者
可以在链接脚本文件设置,同时里面描述了程序在内存中的布局,包括代码段、数据段、堆栈和堆等

使用特权

评论回复
8
春日负喧| | 2024-2-17 03:00 | 只看该作者
正常来说,在链接脚本文件中,可以找到堆空间的起始地址定义

使用特权

评论回复
9
温室雏菊| | 2024-2-17 05:00 | 只看该作者
要查找STM32在Keil下的工程堆空间的起始地址,您需要查看工程的链接脚本文件(通常是以.scatter为后缀的文件),并在其中寻找堆空间的定义

使用特权

评论回复
10
白马过平川| | 2024-2-17 07:00 | 只看该作者
我都是直接设置一下大小就完事儿了,在启动文件

使用特权

评论回复
11
西洲| | 2024-2-17 09:00 | 只看该作者
栈空间和全局变量的地址重合通常是由于内存布局的设置或者代码中的错误导致的

使用特权

评论回复
12
捧一束彼岸花| | 2024-2-17 11:00 | 只看该作者
如果您的栈空间从地址0x2000be28向下生长,而全局变量write_data_buf的地址是0x2000ba28,这意味着栈空间的生长方向与全局变量的地址分配发生了重叠。这种情况可能会导致栈空间覆盖全局变量,从而引发未定义的行为和错误

使用特权

评论回复
13
风凉| | 2024-2-17 15:00 | 只看该作者
检查链接脚本文件(.scatter文件)中的内存布局定义,确保栈空间和全局变量的地址范围不会重叠

使用特权

评论回复
14
故意相遇| | 2024-2-17 20:00 | 只看该作者
检查代码中的静态变量、全局变量和动态分配的内存(堆空间)的使用,确保它们不会与栈空间发生冲突

使用特权

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

本版积分规则

433

主题

1618

帖子

3

粉丝