OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17785|回复: 15

IAR编译 STM32The stack pointer for stack 'CSTACK' (currently 0x20000E20) is outside the stack range

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-11-3
在线时间
4 小时
发表于 2015-1-2 15:59:41 | 显示全部楼层 |阅读模式
5金钱
我先说下现象,用IAR编译的程序,第一次把程序下进STM32里后,不运行,但是复位后就能运行,或者掉电再上电也能运行。为什么把程序第一次下进STM32不运行?太奇怪了!

  在IAR的debugger方式下,出现一个报警
The stack pointer for stack 'CSTACK' (currently 0x20000E20) is outside the stack range (0x20001C18 to 0x20002018) 
查了些资料,说是堆栈溢出,我就开了一个任务,点亮LED灯,用的是CPU的PC3、PC4、PC5引脚。

一步一步跟踪调试,发现问题就出在任务切换的时候,在空闲任务void  OS_IdleTask (void *p_arg)   ,在这个函数里死循环。

为什么复位后就能正常运行了,哎 

最佳答案

查看完整内容[请看2#楼]

刚刚解决了类似的问题,我的警告是这样: STM32The stack pointer for stack 'CSTACK' (currently 0x20001840) is outside the stack range 我就去查询了当前target的.map文件,定位到了0x20001840所在的函数区域,不一定恰好是0x20001840,可能是0x20001800,但是0x20001840包含在0x20001800所在的那个函数范围内,然后去研究了一下这个函数的代码,发现有一些问题,赋值的时候有内存溢出的现象,更正之后告警就不再出现了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-8-14
在线时间
3 小时
发表于 2015-1-2 15:59:42 | 显示全部楼层
刚刚解决了类似的问题,我的警告是这样:
STM32The stack pointer for stack 'CSTACK' (currently 0x20001840) is outside the stack range
我就去查询了当前target的.map文件,定位到了0x20001840所在的函数区域,不一定恰好是0x20001840,可能是0x20001800,但是0x20001840包含在0x20001800所在的那个函数范围内,然后去研究了一下这个函数的代码,发现有一些问题,赋值的时候有内存溢出的现象,更正之后告警就不再出现了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-1-2 20:31:49 | 显示全部楼层
改小点试试。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-11-3
在线时间
4 小时
 楼主| 发表于 2015-1-2 21:30:44 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
The stack pointer for stack 'CSTACK' (currently 0x20000E20) is outside the stack range (0x20001C18 to 0x20002018)
怎么改?改什么? 
CSTACK不在堆栈内
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-11-3
在线时间
4 小时
 楼主| 发表于 2015-1-3 08:35:27 | 显示全部楼层
回复【3楼】jiashijiang:
---------------------------------
没人遇到过同样的问题么?
回复

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1213
金钱
1213
注册时间
2011-4-9
在线时间
97 小时
发表于 2015-1-4 08:20:28 | 显示全部楼层
好像不用管那条警告,我的程序也是出现那条警告,但程序也能正常运行,这个应该是操作系统的问题,你的程序应该还有哪里设置的问题,建议仔细看看系统配置文件里的那些宏吧。
回复

使用道具 举报

13

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-12-12
在线时间
13 小时
发表于 2015-1-5 13:09:43 | 显示全部楼层
可以把堆栈size设大点
回复

使用道具 举报

7

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
261
金钱
261
注册时间
2015-10-8
在线时间
36 小时
发表于 2015-10-17 18:48:42 | 显示全部楼层
回复【6楼】luofeng:
---------------------------------
堆栈设大点也不行
回复

使用道具 举报

7

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
261
金钱
261
注册时间
2015-10-8
在线时间
36 小时
发表于 2015-10-17 18:55:47 | 显示全部楼层
回复【3楼】jiashijiang:
---------------------------------
你好 知道怎么解决了吗?  我也遇到同样的问题
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2016-1-6
在线时间
2 小时
发表于 2016-1-6 12:50:29 | 显示全部楼层
我也遇到同样的问题,请问现在解决了吗?
回复

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2016-1-6 13:56:59 | 显示全部楼层
你想多了 发表于 2016-1-6 12:50
我也遇到同样的问题,请问现在解决了吗?

程序一开始就跑飞了,正常的话你复位后从 0x80000004处取出复位中断服务入口地址进入Reset_Handler,继而执行复位中断服务程序,然后跳转到_main函数,最后进入main函数程序正常运行。一开始你 0x80000004这个地址里面存放的内容为PC指针,也就是系统启动的时候 PC 被赋予了错误的值导致程序没有正常进入Reset_Handler导致程序跑飞,而复位后正确找回了这个PC值程序就正常了,会不会是你一开始PC指针的问题,你可以通过反汇编查看下里面PC的内容指哪去了,感觉应该跟“Thumb2 指令至少是半字对齐的”这个有关系,给你份资料,看下能不能帮到你

Cortex-M3汇编实践.pdf

1.08 MB, 下载次数: 1003

我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2016-1-6 15:03:47 | 显示全部楼层
调试器有起始地址配置,考虑你是不是配置错误?另外下面有篇文章也可以参考一下
http://www.stmcu.org/module/forum/thread-528788-1-1.html
我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2016-3-22
在线时间
31 小时
发表于 2016-10-20 13:54:24 | 显示全部楼层
遇到同样的问题,请问解决了吗?
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2019-1-25
在线时间
22 小时
发表于 2019-2-12 22:41:53 | 显示全部楼层
遇到同样的问题,第一次使用IAR调试UCOS
能不能引入内存保护呢??
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2019-7-27 11:23:13 | 显示全部楼层
把os_cpu_a.asm文件当中,OSStartHighRdy函数的下面三条汇编代码注释掉:
LDR R0, =OS_CPU_ExceptStkBase
LDR R1, [R0]
MSR MSP, R1
这个函数的说明里面提到是用来在上下文切换时候设置主栈的
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2019-7-27 11:24:15 | 显示全部楼层
崔洪玮 发表于 2019-2-12 22:41
遇到同样的问题,第一次使用IAR调试UCOS
能不能引入内存保护呢??

你看我的回答~~
没有脑袋
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 07:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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