QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

热搜: eclipse ecos stm32 ecos源码 如何获取ecos ecos源代码 code goAhead redboot
搜索
发新帖

4

主题

0

听众

237

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2013-11-27
威望
0
金钱
183
贡献
0
注册时间
2013-7-17
积分
237
帖子
54
主题
4
精华
0
UID
382
发表于 2013-7-27 18:14:52 |显示全部楼层
更多
不清楚eCos的堆栈空间大小是如何定的呢?前两天我运行一个小系统,512B的堆栈空间,运行了一会儿后会死机,后来改为1024后24H没出现问题。但问题是:如何确认当前的堆栈空间够用?总不能无限量供给吧。
另外,eCos无法查询单片机RAM使用状况,这点也很拙计。。。我根本不知道单片机的RAM资源什么时候会被用光。。。。

求解答!
回复

使用道具 举报

4

主题

0

听众

237

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2013-11-27
威望
0
金钱
183
贡献
0
注册时间
2013-7-17
积分
237
帖子
54
主题
4
精华
0
UID
382
发表于 2013-7-27 19:23:55 |显示全部楼层
还有CPU的占用率。。。同样拙计。。。。求指导
回复

使用道具 举报

80

主题

8

听众

2285

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-2-27
威望
0
金钱
1828
贡献
0
注册时间
2012-5-1
积分
2285
帖子
437
主题
80
精华
4
UID
2
发表于 2013-7-28 14:58:29 |显示全部楼层
agogos 发表于 2013-7-27 19:23
还有CPU的占用率。。。同样拙计。。。。求指导

线程堆栈空间的大小是依据你线程函数调用情况而定的,如果你的函数调用很深,则需要较大的空间。
在eCos中,每种体系结构,都定义了一个典型线程堆栈空间大小,位于hal_arch.h文件中,cortxm体系见如下代码:
  1. //==========================================================================
  2. // Minimal and sensible stack sizes: the intention is that applications
  3. // will use these to provide a stack size in the first instance prior to
  4. // proper analysis.  Idle thread stack should be this big.

  5. //    THESE ARE NOT INTENDED TO BE MICROMETRICALLY ACCURATE FIGURES.
  6. //           THEY ARE HOWEVER ENOUGH TO START PROGRAMMING.
  7. // YOU MUST MAKE YOUR STACKS LARGER IF YOU HAVE LARGE "AUTO" VARIABLES!

  8. // This is not a config option because it should not be adjusted except
  9. // under "enough rope" sort of disclaimers.

  10. // A minimal, optimized stack frame - space for return link plus four
  11. // arguments or local variables.
  12. #define CYGNUM_HAL_STACK_FRAME_SIZE (4 * 20)

  13. // Stack needed for a context switch
  14. #if !defined CYGNUM_HAL_STACK_CONTEXT_SIZE
  15. #define CYGNUM_HAL_STACK_CONTEXT_SIZE (4 * 20)
  16. #endif

  17. // Interrupt + call to ISR, interrupt_end() and the DSR
  18. #define CYGNUM_HAL_STACK_INTERRUPT_SIZE \
  19.     (CYGNUM_HAL_STACK_CONTEXT_SIZE + 2 * CYGNUM_HAL_STACK_FRAME_SIZE)

  20. // Space for the maximum number of nested interrupts, plus room to call functions
  21. #define CYGNUM_HAL_MAX_INTERRUPT_NESTING 4

  22. // Minimum stack size. Space for the given number of nested
  23. // interrupts, plus a thread context switch plus a couple of function
  24. // calls.
  25. #define CYGNUM_HAL_STACK_SIZE_MINIMUM \
  26.         ((CYGNUM_HAL_MAX_INTERRUPT_NESTING+1) * CYGNUM_HAL_STACK_INTERRUPT_SIZE + \
  27.          2 * CYGNUM_HAL_STACK_FRAME_SIZE)

  28. // Typical stack size -- used mainly for test programs. The minimum
  29. // stack size plus enough space for some function calls.
  30. #define CYGNUM_HAL_STACK_SIZE_TYPICAL \
  31.         (CYGNUM_HAL_STACK_SIZE_MINIMUM + 32 * CYGNUM_HAL_STACK_FRAME_SIZE)
复制代码
回复

使用道具 举报

80

主题

8

听众

2285

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-2-27
威望
0
金钱
1828
贡献
0
注册时间
2012-5-1
积分
2285
帖子
437
主题
80
精华
4
UID
2
发表于 2013-7-28 15:01:03 |显示全部楼层
在设计不是很复杂的情况下,一般用CYGNUM_HAL_STACK_SIZE_TYPICAL这个宏定义堆栈大小即可!
另外,CYGNUM_HAL_STACK_SIZE_MINIMUM宏定义了线程需要的最小堆栈大小,简单线程可以使用这个!
回复

使用道具 举报

80

主题

8

听众

2285

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-2-27
威望
0
金钱
1828
贡献
0
注册时间
2012-5-1
积分
2285
帖子
437
主题
80
精华
4
UID
2
发表于 2013-7-28 15:04:15 |显示全部楼层
CPU的占用率,可以使用cpuload组件包,如下图所示:

cpuload组件包描述如下:
cpuload support.
Aliases: cpuload
Macro: CYGPKG_CPULOAD

This package measures the CPU load over the last 100ms, 1second and 10 second. All loads are returned as a percentage, ie 0-100. This is only a rough measure.

因此,通过这个组件包,可以计算过去100ms、1S、10S时间的CPU负荷情况!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博账号登陆

回复

使用道具 举报

80

主题

8

听众

2285

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-2-27
威望
0
金钱
1828
贡献
0
注册时间
2012-5-1
积分
2285
帖子
437
主题
80
精华
4
UID
2
发表于 2013-7-28 15:05:19 |显示全部楼层
RAM使用情况,没研究过,但应该也可以计算出来!
回复

使用道具 举报

4

主题

0

听众

237

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2013-11-27
威望
0
金钱
183
贡献
0
注册时间
2013-7-17
积分
237
帖子
54
主题
4
精华
0
UID
382
发表于 2013-7-28 15:34:21 |显示全部楼层
reille 发表于 2013-7-28 15:04
CPU的占用率,可以使用cpuload组件包,如下图所示:

cpuload组件包描述如下:

看起来这个可以试试。。。
回复

使用道具 举报

4

主题

0

听众

237

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2013-11-27
威望
0
金钱
183
贡献
0
注册时间
2013-7-17
积分
237
帖子
54
主题
4
精华
0
UID
382
发表于 2013-7-28 16:27:10 |显示全部楼层
reille 发表于 2013-7-28 15:04
CPU的占用率,可以使用cpuload组件包,如下图所示:

cpuload组件包描述如下:

我试了下,这个cyg_cpuload_calibrate函数看说明应该是在所有任务都没起来的条件下运行。。。怎么无论怎么高CPUload总是100啊。。。
回复

使用道具 举报

4

主题

0

听众

237

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2013-11-27
威望
0
金钱
183
贡献
0
注册时间
2013-7-17
积分
237
帖子
54
主题
4
精华
0
UID
382
发表于 2013-7-28 16:49:05 |显示全部楼层
reille 发表于 2013-7-28 15:05
RAM使用情况,没研究过,但应该也可以计算出来!

堆栈可以通过调用cyg_thread_measure_stack_usage查看。。。RAM现在也可以看了,稍微有点小技巧。。后面补上。。。
回复

使用道具 举报

80

主题

8

听众

2285

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-2-27
威望
0
金钱
1828
贡献
0
注册时间
2012-5-1
积分
2285
帖子
437
主题
80
精华
4
UID
2
发表于 2013-7-28 19:04:25 |显示全部楼层
agogos 发表于 2013-7-28 16:27
我试了下,这个cyg_cpuload_calibrate函数看说明应该是在所有任务都没起来的条件下运行。。。怎么无论怎 ...

你线程有没有sleep下啊???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

无觅相关文章插件

申请友链|手机版|关于本站|站点帮助|eCos技术网 ( 粤ICP备12094833号-1 )   

GMT+8, 2014-2-28 18:35 , Processed in 0.137412 second(s), 37 queries .

Powered by Discuz!2.5 X2.5

© 2001-2012 Comsenz Inc.

回顶部