查看: 5649|回复: 7

[求助] uCOS/RTOS: 'CSTACK' is outside of the stack range

[复制链接]

该用户从未签到

3

主题

10

帖子

0

注册会员

Rank: 2

积分
59
最后登录
2017-7-3
发表于 2016-3-6 23:34:02 | 显示全部楼层 |阅读模式
本帖最后由 LeoZhou34 于 2016-6-12 17:14 编辑

大家好!

我在IAR 7.5下移植了uCOS II(注:基于NXP LPC1768FBD100),创建任务后,只要开始调度,就会提示“The stack pointer for stack 'CSTACK' (currently 0x100012E8) is outside the stack range (0x10001610 to 0x10001E10)”。

说明:移植uCOS后,只创建了一个任务App_TaskStart(),并在这个任务中设置了一个断点,每次运行到此断点时,都会提示'CSTACK' is outside of the stack range这个信息。

请问这是什么原因导致这一问题,如何解决?
谢谢!

我知道答案 目前已有7人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-3-7 11:11:20 | 显示全部楼层
楼主选择的芯片是什么?
检查下芯片stack配置了多少?是否溢出。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

10

帖子

0

注册会员

Rank: 2

积分
59
最后登录
2017-7-3
 楼主| 发表于 2016-3-7 13:02:12 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2016-3-7 11:11
楼主选择的芯片是什么?
检查下芯片stack配置了多少?是否溢出。

选择的芯片是 NXP LPC1768,芯片的stack是默认配置为0x800,如何检查stack是否溢出?

执行单步调试发现,当执行"OSStart(); " 运行到"OSStartHighRdy();"  下的 "LDR R0, =OSRunning ; OSRunning = TRUE"时就开始提示'CSTACK' is outside of the stack range这个信息。

另外,在该程序中增加一个LED闪烁的功能,且运行正常。

请协助帮忙。
谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-3-7 13:08:49 | 显示全部楼层
LeoZhou34 发表于 2016-3-7 13:02
选择的芯片是 NXP LPC1768,芯片的stack是默认配置为0x800,如何检查stack是否溢出?

执行单步调试发现 ...

那么你ucos里面使用掉的stack有多少呢?
看看程序你配置了多少?
另外,把你说CSTACK is outside of the stack range 信息的界面,截个图给我看看。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

10

帖子

0

注册会员

Rank: 2

积分
59
最后登录
2017-7-3
 楼主| 发表于 2016-3-7 13:36:32 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2016-3-7 13:08
那么你ucos里面使用掉的stack有多少呢?
看看程序你配置了多少?
另外,把你说CSTACK is outside of the  ...

ucos里面使用掉的stack有多少,不是很清楚,还请告之如何确认?
程序中关于这个配置在哪?

QQ截图20160307133352.jpg
QQ截图20160307133021.jpg
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-3-7 13:57:07 | 显示全部楼层
LeoZhou34 发表于 2016-3-7 13:36
ucos里面使用掉的stack有多少,不是很清楚,还请告之如何确认?
程序中关于这个配置在哪?

到icf文件中查看。
看你这个提示,应该是CSTACK不在区域里了,你看看RAM的地址是多少,到icf文件中查看。
icf文件中会规定stack的地址的,你看看起始地址是否超出了RAM的区域。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

10

帖子

0

注册会员

Rank: 2

积分
59
最后登录
2017-7-3
 楼主| 发表于 2016-3-7 14:51:32 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2016-3-7 13:57
到icf文件中查看。
看你这个提示,应该是CSTACK不在区域里了,你看看RAM的地址是多少,到icf文件中查看。 ...

如下是icf文件的信息:

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__   = 0x0007FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x10007FDF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x800;
define symbol __ICFEDIT_size_heap__   = 0x1000;
/**** End of ICF editor section. ###ICF###*/

define symbol __CRP_start__   = 0x000002FC;
define symbol __CRP_end__     = 0x000002FF;

define symbol __RAM1_start__  = 0x2007C000;
define symbol __RAM1_end__    = 0x20083FFF;

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__] -  mem:[from  __CRP_start__ to __CRP_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define region CRP_region   = mem:[from __CRP_start__ to __CRP_end__];
define region RAM1_region  = mem:[from __RAM1_start__ to __RAM1_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
place in CRP_region          { section .crp };
place in RAM1_region        { section .sram };
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-3-7 15:32:17 | 显示全部楼层
LeoZhou34 发表于 2016-3-7 14:51
如下是icf文件的信息:

/*###ICF### Section handled by ICF editor, don't touch! ****/

你有用到heap吗?
可以把stack设置大点。
另外对照你的芯片型号,检查下RAM地址是否是对的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 06:36 , Processed in 0.102324 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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