OpenEdv-开源电子网

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

求助uCOSIII空闲任务

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
发表于 2016-8-14 11:50:24 | 显示全部楼层 |阅读模式
1金钱
原子哥F4的例程里面有这么一段
void  App_OS_IdleTaskHook (void)
{
        static int num;
        num++;
        if(num%50000==0)
        {
                printf("Idle Task Running 50000 times!\r\n");
        }
}

我没搞懂是怎么运行的,我想统计每个任务的CPU占用率。网上找不到相关的资料,求助大家
QQ截图20160814114930.png


最佳答案

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

ucos只有有统计的宏吗,打开他,然后就可以直接打印每个任务的CPU占用率了 #define OS_CFG_STAT_TASK_EN 1u /* Enable (1) or Disable(0) the statistics task */ #define OS_CFG_STAT_TASK_STK_CHK_EN 1u /* Check task stacks from statistic task
硬件入门,初学软件,请多多指教
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-14 11:50:25 | 显示全部楼层
ucos只有有统计的宏吗,打开他,然后就可以直接打印每个任务的CPU占用率了

#define OS_CFG_STAT_TASK_EN             1u   /* Enable (1) or Disable(0) the statistics task                          */
#define OS_CFG_STAT_TASK_STK_CHK_EN     1u   /* Check task stacks from statistic task   
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-8-14 14:06:42 | 显示全部楼层
每个任务的CPU占用率是吧?
回复

使用道具 举报

18

主题

422

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1139
注册时间
2014-5-24
在线时间
116 小时
发表于 2016-8-15 09:21:17 | 显示全部楼层
使用OS的统计任务,不过用printf()很占时间,会不准
I See Fire.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.·.  只给方向,不妨碍思考
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2016-8-15 18:39:44 | 显示全部楼层
八度空间 发表于 2016-8-14 14:06
每个任务的CPU占用率是吧?

是的,不知道怎么统计并且计算
硬件入门,初学软件,请多多指教
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2016-8-15 18:40:08 | 显示全部楼层
ysq7120 发表于 2016-8-15 10:45
ucos只有有统计的宏吗,打开他,然后就可以直接打印每个任务的CPU占用率了

#define OS_CFG_STAT_TASK_EN ...

具体应该怎么实现呢?
硬件入门,初学软件,请多多指教
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-16 08:12:46 | 显示全部楼层
CPU_STK_SIZE size,used;
  OS_CPU_USAGE usage;

          used = StatTCB.StkUsed;
          size = StatTCB.StkSize;
          usage = StatTCB.CPUUsageMax;       
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

11

主题

80

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4493
金钱
4493
注册时间
2016-8-2
在线时间
51 小时
发表于 2016-8-16 09:43:50 | 显示全部楼层
这样子就可以查看任务内存使用率了
//主任务的任务函数
void main_task(void *p_arg)
{
    OS_ERR err;
    CPU_STK_SIZE free,used;
    (void)p_arg;
       
//        printf("**main_task 任务开始:\r\n");       
        printf("**main_task 任务优先级:%d\r\n",MAIN_TASK_PRIO);
    while(DEF_TRUE)
    {
            u8 buf[30];         
            OSTaskStkChk (&Main_TaskTCB,&free,&used,&err);
                /*串口打印任务内存使用*/
            //printf("SystemDatasBroadcast  used/free:%d/%d  usage:%%%d\r\n",used,free,(used*100)/(used+free));
                /*液晶打印任务内存使用*/
              sprintf((char*)buf,"main_task:SIZE %d.used %d.free %d.usage %%%d ",MAIN_STK_SIZE,used,free,(used*100)/(used+free));                                               
              LCD_ShowString(30,390,400,16,16,buf);
}
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-16 09:51:39 | 显示全部楼层
shaozp 发表于 2016-8-16 09:43
这样子就可以查看任务内存使用率了
//主任务的任务函数
void main_task(void *p_arg)

建议打开系统自动调度OSTaskStkChk的宏,更方便使用。不然任务多了每个都要去调用一次。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

11

主题

80

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4493
金钱
4493
注册时间
2016-8-2
在线时间
51 小时
发表于 2016-8-16 10:45:25 | 显示全部楼层
ysq7120 发表于 2016-8-16 09:51
建议打开系统自动调度OSTaskStkChk的宏,更方便使用。不然任务多了每个都要去调用一次。

这个倒是没尝试,我尝试一下 谢谢
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2016-8-21 12:48:09 | 显示全部楼层
ysq7120 发表于 2016-8-16 08:12
CPU_STK_SIZE size,used;
  OS_CPU_USAGE usage;

谢谢
硬件入门,初学软件,请多多指教
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2016-8-21 12:48:35 | 显示全部楼层
shaozp 发表于 2016-8-16 09:43
这样子就可以查看任务内存使用率了
//主任务的任务函数
void main_task(void *p_arg)

谢谢
硬件入门,初学软件,请多多指教
回复

使用道具 举报

3

主题

144

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7342
金钱
7342
注册时间
2016-2-6
在线时间
1863 小时
发表于 2016-8-21 13:09:03 | 显示全部楼层
这个统计功能就是看系统在IDLE任务中执行的时间和次数,IDLE任务执行的时间越长,说明用户任务执行的时间越短,相应的CPU占用率就越低。这个机制和windows的任务管理器是一样,你看看你的Windows系统任务管理器就清楚了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 20:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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