你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

堆栈溢出的问题

[复制链接]
zi约 提问时间:2017-9-1 08:46 /
悬赏8ST金币已解决
我在栈底定义了一个数组StackOverFlowPtrn[] ,然后执行了一些其他的程序,再检测这个数组,我发现这个数组的值第一个数总是为0,其他的数据是正确的,这是堆栈溢出吗??我修改了堆栈的大小还是一样的问题,请问 有人知道这是什么原因吗?

刚开始:
这是定义:extern uint32_t    StackOverFlowPtrn[]   _attribute_((section("STACK_BOTTOM"),zero_init))

StackOverFlowPtrn[0]=0xAAAAAAAA;
StackOverFlowPtrn[1]=0xBBBBBBBB;
StackOverFlowPtrn[2]=0xCCCCCCCC;
StackOverFlowPtrn[3]=0xDDDDDDD;

一段时间后,检测这四个值,第一个StackOverFlowPtrn[0]=0,其他三个是正常的。。。



最佳答案

查看完整内容

你的section “STACK_BOTTOM”是怎么定义的?列出来看看。如此多定义一个STACK_BOTTOM,还不如直接使用“Stack_Mem”标号来引用栈底的位置: 然后直接从“Stack_Mem”开始递增的、小心的写一些标识再对比。小心的原因是写的标识可能会与正常的栈内数据重合,导致栈被破坏。
收藏 评论6 发布时间:2017-9-1 08:46

举报

6个回答
moyanming2013 回答时间:2017-9-1 08:46:23
你的section “STACK_BOTTOM”是怎么定义的?列出来看看。如此多定义一个STACK_BOTTOM,还不如直接使用“Stack_Mem”标号来引用栈底的位置:

QQ截图20170901113001.jpg

然后直接从“Stack_Mem”开始递增的、小心的写一些标识再对比。小心的原因是写的标识可能会与正常的栈内数据重合,导致栈被破坏。

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

gujiamao 回答时间:2017-9-1 09:15:59
那你设置多大,编译器那边应该可以看出堆栈有没有溢出的

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zi约 回答时间:2017-9-1 15:24:55
moyanming2013 发表于 2017-9-1 11:35
你的section “STACK_BOTTOM”是怎么定义的?列出来看看。如此多定义一个STACK_BOTTOM,还不如直接使用“St ...

我用的芯片是STM32F031的,我设置的是

Stack_Size      EQU     0x00000800

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
还是不行
zi约 回答时间:2017-9-1 15:25:48
gujiamao 发表于 2017-9-1 09:15
那你设置多大,编译器那边应该可以看出堆栈有没有溢出的

怎么看???不懂。。。
zi约 回答时间:2017-9-1 15:28:55
gujiamao 发表于 2017-9-1 09:15
那你设置多大,编译器那边应该可以看出堆栈有没有溢出的

这个怎么看啊,我用的芯片是STM32F031的,堆栈设置0x00000800,这应该足够大了 。。。。
moyanming2013 回答时间:2017-9-1 16:20:00
zi约 发表于 2017-9-1 15:24
我用的芯片是STM32F031的,我设置的是

Stack_Size      EQU     0x00000800

QQ截图20170901161934.jpg

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版