[STM32] STM32堆栈溢出

[复制链接]
 楼主| tao180539 发表于 2018-12-14 17:18 | 显示全部楼层 |阅读模式
本帖最后由 tao180539 于 2018-12-14 17:20 编辑

故意定义了个比较大的数组,仿真运行,看着堆栈指针已经超过栈底了,但是竟然没有触发fault错误中断。第一个图片是上电时候堆栈指针,第二个是大数组压栈时候的指针。第三个是堆栈的大小。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
Ketose 发表于 2018-12-14 17:52 | 显示全部楼层
stackoverflow 在函数返回的时候就要出错了。

评论

谢谢,我试试  发表于 2018-12-15 21:45
john_lee 发表于 2018-12-14 19:26 | 显示全部楼层
程序定义的“栈空间”只是一个软件意义上的内存区而已,CPU其实只有“栈顶”的概念(就是SP)而没有“栈底”的概念。只要软件定义的“栈底”下面还有内存,这个“所谓的栈底”就限制不了CPU压栈和栈空间访问。

评论

谢谢  发表于 2018-12-15 21:46
Prry 发表于 2018-12-14 23:12 | 显示全部楼层
加大栈空间
linqing171 发表于 2018-12-15 21:30 | 显示全部楼层
堆栈虽然溢出了,但是没有超过内存范围,不会直接触发fault。
你把数组内容全部设置为0xAA;
然后用不了多久,这些0xAA覆盖掉的地方的指针被使用的时候,就指向了0xAAAAAAAA这个不存在的地方,就会fault了。不是不报,时候未到。

评论

[url=home.php?mod=space&uid=104624]@linqing171[/url] :对,是这个样子的。谢谢。  发表于 2018-12-17 10:12
[url=home.php?mod=space&uid=589097]@tao180539[/url] :碰到的时候也只是把全局变量改了。并不会崩溃。但是将来用这个全局变量当指针、返回地址、数组下标等的时候,就崩溃了。  发表于 2018-12-16 22:51
意思是,一直压栈,知道碰到全局变量的时候就会触发错误了,是吧  发表于 2018-12-15 21:47
ayb_ice 发表于 2018-12-17 08:42 | 显示全部楼层
只要不超过RAM的低地址就不会异常,堆栈指针没有那么聪明的,不会检查这些的 ,再说中间空闲的空间其实都是栈,只是没有定义而已
 楼主| tao180539 发表于 2018-12-17 10:11 | 显示全部楼层
linqing171 发表于 2018-12-15 21:30
堆栈虽然溢出了,但是没有超过内存范围,不会直接触发fault。
你把数组内容全部设置为0xAA;
然后用不了多久 ...

你说的对
 楼主| tao180539 发表于 2018-12-17 10:12 | 显示全部楼层
Ketose 发表于 2018-12-14 17:52
stackoverflow 在函数返回的时候就要出错了。

试验过了,这个说法不对。
 楼主| tao180539 发表于 2018-12-17 10:13 | 显示全部楼层
john_lee 发表于 2018-12-14 19:26
程序定义的“栈空间”只是一个软件意义上的内存区而已,CPU其实只有“栈顶”的概念(就是SP)而没有“栈底 ...

说的对,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

321

主题

515

帖子

3

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

321

主题

515

帖子

3

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