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

[复制链接]
1546|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 | 显示全部楼层
一般堆栈地址的设置都是在启动文件部分
失物招領 发表于 2024-2-16 23:00 | 显示全部楼层
在Keil μVision中,STM32微控制器的工程堆空间的起始地址通常是在链接脚本文件(.scatter文件)中进行定义
zwsam 发表于 2024-2-16 23:05 | 显示全部楼层
将爱藏于深海 发表于 2024-2-17 01:00 | 显示全部楼层
可以在链接脚本文件设置,同时里面描述了程序在内存中的布局,包括代码段、数据段、堆栈和堆等
春日负喧 发表于 2024-2-17 03:00 | 显示全部楼层
正常来说,在链接脚本文件中,可以找到堆空间的起始地址定义
温室雏菊 发表于 2024-2-17 05:00 | 显示全部楼层
要查找STM32在Keil下的工程堆空间的起始地址,您需要查看工程的链接脚本文件(通常是以.scatter为后缀的文件),并在其中寻找堆空间的定义
白马过平川 发表于 2024-2-17 07:00 | 显示全部楼层
我都是直接设置一下大小就完事儿了,在启动文件
西洲 发表于 2024-2-17 09:00 | 显示全部楼层
栈空间和全局变量的地址重合通常是由于内存布局的设置或者代码中的错误导致的
捧一束彼岸花 发表于 2024-2-17 11:00 | 显示全部楼层
如果您的栈空间从地址0x2000be28向下生长,而全局变量write_data_buf的地址是0x2000ba28,这意味着栈空间的生长方向与全局变量的地址分配发生了重叠。这种情况可能会导致栈空间覆盖全局变量,从而引发未定义的行为和错误
风凉 发表于 2024-2-17 15:00 | 显示全部楼层
检查链接脚本文件(.scatter文件)中的内存布局定义,确保栈空间和全局变量的地址范围不会重叠
故意相遇 发表于 2024-2-17 20:00 | 显示全部楼层
检查代码中的静态变量、全局变量和动态分配的内存(堆空间)的使用,确保它们不会与栈空间发生冲突
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2345

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部