打印

IAR6.0工程Debug时产生“stack is outside the stack range”的问题

[复制链接]
15411|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alphal|  楼主 | 2011-7-14 23:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 alphal 于 2011-7-14 23:02 编辑

我用IAR6.0建了个简单LPC2378+UCOSII的工程,debug的时候总是在执行BSP_Init中Tmr_TickInit函数时进入__prefetch_handler死掉了。并debug时堆栈有报错。我的cstartup.s从IAR自带的Example中copy过来的(非含UCOSII的工程中)。Linker中Memory及stack堆栈设置如图。
也不明白如图中的memory及stack设置,“'SVC_STACK' (currently 0x40002E68) is outside the stack range (0x400043F8 to 0x400045F8) ”中的地址怎么能算出来?



debug时报错如下:
Thu Jul 14, 2011 21:24:30: The stack pointer for stack 'SVC_STACK' (currently 0x40002E68) is outside the stack range (0x400043F8 to 0x400045F8)
Thu Jul 14, 2011 21:30:04: The stack pointer for stack 'SVC_STACK' (currently 0x40002E50) is outside the stack range (0x400043F8 to 0x400045F8)
Thu Jul 14, 2011 21:30:04: The stack pointer for stack 'IRQ_STACK' (currently 0x40004708) is outside the stack range (0x400045F8 to 0x400046F8)
Thu Jul 14, 2011 21:30:15: The stack pointer for stack 'SVC_STACK' (currently 0x40002E50) is outside the stack range (0x400043F8 to 0x400045F8)

iar.GIF (25.88 KB )

iar.GIF

memory.GIF (13.39 KB )

memory.GIF

相关帖子

沙发
alphal|  楼主 | 2011-7-14 23:59 | 只看该作者
夜半求救啊。。。

使用特权

评论回复
板凳
上官金虹| | 2011-7-15 09:02 | 只看该作者
堆栈设置太小,或者你局部变量太大(比如大的局部数组)
或者你连接脚本本身有问题。

使用特权

评论回复
地板
ayb_ice| | 2011-7-15 09:18 | 只看该作者
禁止"堆栈检查"选项

使用特权

评论回复
5
alphal|  楼主 | 2011-7-15 09:20 | 只看该作者
SVC_STACK设成0x800也问题依然。

连接脚本在另外一个IAR V4.22工程中拷过来(这个程序运行正常),这个V6.0的工程代码很简单,占堆栈肯定比那个少。

使用特权

评论回复
6
alphal|  楼主 | 2011-7-15 10:42 | 只看该作者
禁止"堆栈检查"选项

在哪个目录下设置的?

使用特权

评论回复
7
ayb_ice| | 2011-7-15 13:21 | 只看该作者
RT

未命名.JPG (125.12 KB )

未命名.JPG

使用特权

评论回复
8
alphal|  楼主 | 2011-7-15 15:13 | 只看该作者
感谢ayb_ice,我用的IAR 6.0,里面好像找不到这个设置。

使用特权

评论回复
9
ygl9332| | 2011-8-18 15:58 | 只看该作者
Tools->Option->Stack->Warn when stack pointer is out of bounds.
条件:
IAR Assembler for Samsung SAM8
2.30A/W32 (2.30.1.3)

使用特权

评论回复
10
iamliq| | 2012-8-12 12:18 | 只看该作者
我也遇到同样问题,非常纠结,我用LPC2103+UCOS-II2.86,只有3个用户任务(我是动态创建和删除任务).
我设定
C_STACK=0X200,
SVC_STACK=0X700, 在2.86移植版本中,任务和系统都运行在SVC模式下,连中断处理也是先进IRQ然后转到SVC模式下处理
IRQ_STACK=0X100
FIQ,UND,ABT_STACK 都设定为0X10
HEAP_STACK 设定为 0X50
然后程序死掉了,OSStart(),y就死,DEBUG警告是:

Sun Aug 12 12:10:36 2012: The stack pointer for stack 'SVC_STACK' (currently 0x40001A70) is outside the stack range (0x40000040 to 0x40000740)

使用特权

评论回复
11
yewuyi| | 2012-8-12 19:38 | 只看该作者
最好不要禁止堆栈检查,否则可能造成难以预料的后果。

还是老实点去检查代码中的变量、数组等的定义以及你的堆栈大小的设置为好,一般在IAR中是可以调整堆栈在RAM中开辟的大小的,当然,如果你的堆栈大小已经完全覆盖了RAM区,则没有办法了,只能换个RAM更大的CHIP。

使用特权

评论回复
12
aozima| | 2012-8-12 22:44 | 只看该作者
用OS时,每个线程的栈是独立的。
而IAR检查的是那个默认的栈,所以,跑在任何线程中,IAR都发现栈溢出了。

使用特权

评论回复
13
sunboyyb| | 2013-8-13 22:38 | 只看该作者
Tue Aug 13 21:51:17 2013: The stack pointer for stack 'Stack' 我也碰到了,求解

使用特权

评论回复
14
sunboyyb| | 2013-8-13 23:30 | 只看该作者
发现换个仿真器就可以了诶

使用特权

评论回复
15
123流水| | 2015-10-1 17:23 | 只看该作者
楼主,我也遇到过同样的问题,竟然发现是少联一根线的原因;P

使用特权

评论回复
16
wanghlady| | 2016-7-5 09:30 | 只看该作者
123流水 发表于 2015-10-1 17:23
楼主,我也遇到过同样的问题,竟然发现是少联一根线的原因;P

你好 少连了什么线?

使用特权

评论回复
17
749120145| | 2016-12-16 11:46 | 只看该作者
我现在也遇到了这种问题 楼主解决了吗?

使用特权

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

本版积分规则

112

主题

473

帖子

1

粉丝