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

[复制链接]
 楼主| 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)

本帖子中包含更多资源

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

×
 楼主| alphal 发表于 2011-7-14 23:59 | 显示全部楼层
夜半求救啊。。。
上官金虹 发表于 2011-7-15 09:02 | 显示全部楼层
堆栈设置太小,或者你局部变量太大(比如大的局部数组)
或者你连接脚本本身有问题。
ayb_ice 发表于 2011-7-15 09:18 | 显示全部楼层
禁止"堆栈检查"选项
 楼主| alphal 发表于 2011-7-15 09:20 | 显示全部楼层
SVC_STACK设成0x800也问题依然。

连接脚本在另外一个IAR V4.22工程中拷过来(这个程序运行正常),这个V6.0的工程代码很简单,占堆栈肯定比那个少。
 楼主| alphal 发表于 2011-7-15 10:42 | 显示全部楼层
禁止"堆栈检查"选项

在哪个目录下设置的?
ayb_ice 发表于 2011-7-15 13:21 | 显示全部楼层
RT

本帖子中包含更多资源

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

×
 楼主| alphal 发表于 2011-7-15 15:13 | 显示全部楼层
感谢ayb_ice,我用的IAR 6.0,里面好像找不到这个设置。
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)
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)
yewuyi 发表于 2012-8-12 19:38 | 显示全部楼层
最好不要禁止堆栈检查,否则可能造成难以预料的后果。

还是老实点去检查代码中的变量、数组等的定义以及你的堆栈大小的设置为好,一般在IAR中是可以调整堆栈在RAM中开辟的大小的,当然,如果你的堆栈大小已经完全覆盖了RAM区,则没有办法了,只能换个RAM更大的CHIP。
aozima 发表于 2012-8-12 22:44 | 显示全部楼层
用OS时,每个线程的栈是独立的。
而IAR检查的是那个默认的栈,所以,跑在任何线程中,IAR都发现栈溢出了。
sunboyyb 发表于 2013-8-13 22:38 | 显示全部楼层
Tue Aug 13 21:51:17 2013: The stack pointer for stack 'Stack' 我也碰到了,求解
sunboyyb 发表于 2013-8-13 23:30 | 显示全部楼层
发现换个仿真器就可以了诶
123流水 发表于 2015-10-1 17:23 | 显示全部楼层
楼主,我也遇到过同样的问题,竟然发现是少联一根线的原因;P
wanghlady 发表于 2016-7-5 09:30 | 显示全部楼层
123流水 发表于 2015-10-1 17:23
楼主,我也遇到过同样的问题,竟然发现是少联一根线的原因;P

你好 少连了什么线?
749120145 发表于 2016-12-16 11:46 | 显示全部楼层
我现在也遇到了这种问题 楼主解决了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

473

帖子

1

粉丝
快速回复 返回顶部 返回列表