QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

热搜: eclipse ecos stm32 ecos源码 如何获取ecos ecos源代码 code goAhead redboot
搜索
发新帖
楼主: agogos
查看: 414| 回复: 35

69

主题

7

听众

1694

积分

超级版主

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

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
1357
贡献
0
注册时间
2012-5-1
积分
1694
帖子
317
主题
69
精华
4
UID
2
发表于 2013-7-28 19:04:38 |显示全部楼层
更多
agogos 发表于 2013-7-28 16:49
堆栈可以通过调用cyg_thread_measure_stack_usage查看。。。RAM现在也可以看了,稍微有点小技巧。。后面 ...

期待……
回复

使用道具 举报

69

主题

7

听众

1694

积分

超级版主

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

该用户从未签到

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

我写的代码:
  1. void test_get_cpuload(void)
  2. {
  3.     diag_printf("\n------- Start test CPU load ------\n\n");

  4. #ifdef CYGPKG_CPULOAD
  5.     cyg_uint32 average_point1s, average_1s, average_10s;
  6.     if (cpuload_handle) {
  7.         cyg_cpuload_get(cpuload_handle, &average_point1s, &average_1s, &average_10s);
  8.         diag_printf("Load average(100ms, 1s, 10s): %3d%%, %3d%%, %3d%%\n",
  9.                        average_point1s, average_1s, average_10s);
  10.     }
  11. #else
  12.     diag_printf("No cpuload package...\n");
  13. #endif

  14.     diag_printf("\n------- End test CPU load ------\n\n");
  15. }
复制代码
测试CPU运行情况如下图所示:

本帖子中包含更多资源

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

回复

使用道具 举报

4

主题

0

听众

199

积分

初级工程师

Rank: 2Rank: 2

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
151
贡献
0
注册时间
2013-7-17
积分
199
帖子
48
主题
4
精华
0
UID
382
发表于 2013-7-28 20:52:55 |显示全部楼层
reille 发表于 2013-7-28 19:04
期待……

首先是编译过程中会出现.elf文件,重点就在这个文件上,可以使用arm-eabi-objdump工具查询内部的各种段长度。
编译完成后在工程目录下敲入如下代码:
/opt/ecos/gnutools/arm-eabi/bin/arm-eabi-objdump.exe main -h(可以-H查看帮助文档)
然后可以看到如下文字输出:
main:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .debug_aranges 00001458  00000000  00000000  00005558  2**3
                  CONTENTS, READONLY, DEBUGGING
  1 .debug_pubnames 000037b9  00000000  00000000  000069b0  2**0
                  CONTENTS, READONLY, DEBUGGING
  2 .debug_info   00045897  00000000  00000000  0000a169  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_abbrev 00009b8a  00000000  00000000  0004fa00  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_line   0000afe1  00000000  00000000  0005958a  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_frame  00003210  00000000  00000000  0006456c  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_str    000085d0  00000000  00000000  0006777c  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_loc    0000d7a6  00000000  00000000  0006fd4c  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .rom_vectors  00000008  08000000  08000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  9 .ARM.exidx    00000010  08000008  08000008  0000009c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
10 .text         00004c68  08000018  08000018  000000ac  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .rodata       0000040c  08004c80  08004c80  00004d14  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
12 .eh_frame     00000008  08005090  08005090  00005120  2**0
                  ALLOC
13 .data         00000434  20000400  08005098  00005120  2**3
                  CONTENTS, ALLOC, LOAD, DATA
14 .bss          00004c9c  20000838  080054d0  00005554  2**3
                  ALLOC
15 .ARM.attributes 0000002f  00000000  00000000  0007d4f2  2**0
                  CONTENTS, READONLY
16 .debug_ranges 000042d8  00000000  00000000  0007d521  2**0
                  CONTENTS, READONLY, DEBUGGING
17 .comment      00000924  00000000  00000000  000817f9  2**0
                  CONTENTS, READONLY
.text为程序内容,需要烧写到Flash中;.rodata是常数量;.data是已经初始化的变量;.bss是没有被初始化的RAM变量。当我们改变堆栈大小时(5个任务,每个任务增加1024B)。.bss段为如下显示:
14 .bss          0000609c  20000838  080054d0  00005554  2**3
                  ALLOC
正好增加了5*1024=5120的空间大小。这里也可以大致看出eCos的使用大小。。。

个人拙见,还请多多指教。
回复

使用道具 举报

4

主题

0

听众

199

积分

初级工程师

Rank: 2Rank: 2

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
151
贡献
0
注册时间
2013-7-17
积分
199
帖子
48
主题
4
精华
0
UID
382
发表于 2013-7-28 20:55:29 |显示全部楼层
reille 发表于 2013-7-28 19:15
我写的代码:测试CPU运行情况如下图所示:

您的代码明天细细看~~谢谢。。
回复

使用道具 举报

4

主题

0

听众

199

积分

初级工程师

Rank: 2Rank: 2

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
151
贡献
0
注册时间
2013-7-17
积分
199
帖子
48
主题
4
精华
0
UID
382
发表于 2013-7-28 21:02:58 |显示全部楼层
reille 发表于 2013-7-28 19:04
期待……

堆栈的使用在调用了cyg_thread_measure_stack_usage后出现了一些可以参考的数据:
eCos刚启动后查询的结果:
BoardLight Stack Used: 168
UART_HMI Stack Used: 532
DCDC Stack Used: 204
Sample Stack Used: 176
Protection Stack Used: 164

串口做了些压力测试后的数据:
BoardLight Stack Used: 200
UART_HMI Stack Used: 628
DCDC Stack Used: 616
Sample Stack Used: 176
Protection Stack Used: 208

目前还没有上升到700B,如果可以检测到的话,就能方便系统做出预警了。
回复

使用道具 举报

4

主题

0

听众

199

积分

初级工程师

Rank: 2Rank: 2

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
151
贡献
0
注册时间
2013-7-17
积分
199
帖子
48
主题
4
精华
0
UID
382
发表于 2013-7-28 21:05:43 |显示全部楼层
本帖最后由 agogos 于 2013-7-28 21:16 编辑

DCDC那个线程上升好快啊。。。。
可能是里面带有消息量的原因。
回复

使用道具 举报

69

主题

7

听众

1694

积分

超级版主

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

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
1357
贡献
0
注册时间
2012-5-1
积分
1694
帖子
317
主题
69
精华
4
UID
2
发表于 2013-7-28 21:45:55 |显示全部楼层
agogos 发表于 2013-7-28 21:02
堆栈的使用在调用了cyg_thread_measure_stack_usage后出现了一些可以参考的数据:
eCos刚启动后查询的结 ...

嗯,还不错,可以看到每个线程的堆栈使用情况!
回复

使用道具 举报

69

主题

7

听众

1694

积分

超级版主

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

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
1357
贡献
0
注册时间
2012-5-1
积分
1694
帖子
317
主题
69
精华
4
UID
2
发表于 2013-7-28 21:47:46 |显示全部楼层
agogos 发表于 2013-7-28 21:02
堆栈的使用在调用了cyg_thread_measure_stack_usage后出现了一些可以参考的数据:
eCos刚启动后查询的结 ...

可以把这个做的更加详细一些,
比如,加入线程的ID、线程名称、线程优先级、线程当前堆栈使用大小、线程堆栈申请大小等!

如果做到这个程度,那就爽歪歪了!
回复

使用道具 举报

4

主题

0

听众

199

积分

初级工程师

Rank: 2Rank: 2

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
151
贡献
0
注册时间
2013-7-17
积分
199
帖子
48
主题
4
精华
0
UID
382
发表于 2013-7-29 19:34:09 |显示全部楼层
本帖最后由 agogos 于 2013-7-29 19:35 编辑
reille 发表于 2013-7-28 19:15
我写的代码:测试CPU运行情况如下图所示:

您说的线程sleep下,是指什么线程?是指除了idle外的其他所有线程么?
所有线程中我都有cyg_thread_delay的。
回复

使用道具 举报

4

主题

0

听众

199

积分

初级工程师

Rank: 2Rank: 2

该用户从未签到

最后登录
2013-10-4
威望
0
金钱
151
贡献
0
注册时间
2013-7-17
积分
199
帖子
48
主题
4
精华
0
UID
382
发表于 2013-7-29 19:39:51 |显示全部楼层
cyg_cpuload_create(&CPU_Load, CPU_Load_Cab, &CPU_Load_Handler);
我是直接上面那句初始化后就在某个线程中调用的。只有在我需要查询的时候再用。。。。
不知道我理解的对不对。。
回复

使用道具 举报

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

无觅相关文章插件

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

GMT+8, 2013-10-5 00:09 , Processed in 0.088474 second(s), 32 queries .

Powered by Discuz!2.5 X2.5

© 2001-2012 Comsenz Inc.

回顶部