IAR下调试问题!

[复制链接]
5343|9
 楼主| btiger2000 发表于 2008-5-9 13:26 | 显示全部楼层 |阅读模式
添加完一段代码后,调试时,在每次断点时,显示如下:<br />The&nbsp;stack&nbsp;pointer&nbsp;for&nbsp;stack&nbsp;'SVC_STACK'&nbsp;(currently&nbsp;0x40000A58)&nbsp;is&nbsp;outside&nbsp;the&nbsp;stack&nbsp;range&nbsp;(0x40007600&nbsp;to&nbsp;0x40007C00)<br /><br /><br />且程序工作也不正常。&nbsp;修改.XCL文件中SVC_STACK_SIZE&nbsp;大小,现象依旧!还请高手高手指点一下,如何解决?谢谢!
twentyone 发表于 2008-5-11 23:57 | 显示全部楼层

应该是设置的问题。

0x40007600&nbsp;to&nbsp;0x40007C00&nbsp;这个地址信息是那里来的?是在你的XCL文件里面配置的,还是因为你选择了特定的芯片?&nbsp;
 楼主| btiger2000 发表于 2008-5-12 08:35 | 显示全部楼层

谢谢楼上的回答!

那个地址信息不是自己设置的,xcl文件只是设置堆栈的大小。我没看明白具体怎么设置起始地址
 楼主| btiger2000 发表于 2008-5-12 18:52 | 显示全部楼层

忽略这个问题! 程序可以正常运行!

  
and 发表于 2008-5-12 23:13 | 显示全部楼层

你的SVC堆栈指针初始化了吗?

程序可以正常运行,那是因为还没有碰到SVC栈。这应该是个潜在的危险。
 楼主| btiger2000 发表于 2008-5-13 08:31 | 显示全部楼层

在startup文件里初始化了!

这个问题好像是iar特有的
wlq_9 发表于 2008-5-13 09:17 | 显示全部楼层

指针超范围了,因为IAR提供了栈检查的功能,可以在达到你设置的一定百分比的时候报警,象ADS之类的即使栈溢出了也不会通知你,可以说这是一个相当实用的功能,尤其是在仿真的时候.<br /><br />出现这个情况,一般是栈空间设的大小和位置不正确,或者是没有初始化相应模式下的栈指针.<br />还有你用的什么芯片,内存范围是多少?其它栈设置的地址是多少?看样子功能多也不见得受人喜欢啊......
 楼主| btiger2000 发表于 2008-5-13 16:19 | 显示全部楼层

堆栈我已经改得很大了,没有效果

我查找了一下启动代码与SVC_STACK有关的只有两句<br /><br />RSEG&nbsp;&nbsp;&nbsp;&nbsp;SVC_STACK:DATA:NOROOT(2)<br /><br />ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp,=SFE(SVC_STACK)&nbsp;&&nbsp;0xFFFFFFF8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;End&nbsp;of&nbsp;SVC_STACK<br /><br /><br />具体SVC_STACK的位置,我不知道在那定义的<br /><br />使用LPC2378,32k的ram&nbsp;,现在用了24k左右!
wangtezi 发表于 2008-9-16 14:26 | 显示全部楼层

用操作系统了吧

  
MakeBetter 发表于 2012-2-22 10:56 | 显示全部楼层
楼上正解,肯定用操作系统,跳到别的任务运行,修改了系统默认堆栈指针。故默认堆栈你修改的再大也会没反映,除非你的任务堆全部在主函数内部申请内存,且同时把默认堆栈大小修改成所以任务需要的堆栈大小之和以上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

81

主题

1179

帖子

6

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