硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1919|回复: 6
收起左侧

[μCOS-III] OSStatTaskCPUUsageInit 函数疑问

[复制链接]

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
发表于 2021-8-18 16:18:30 | 显示全部楼层 |阅读模式
各位 大佬,坛主,下午好。

最近看ucos-3 是 有一个疑问,不知道谁遇见过没?

在研究 统计任务是,是需要先运行 OSStatTaskCPUUsageInit 这个函数,
1:

OSStatTaskCPUUsageInit 这个函数的本意就是  延时 OSCfg_StatTaskRate_Hz 配置的时间, 且这段时间让系统只运行 idle 任务, 然后拿到 OSStatTaskCtrMax 这个变量, 后续做cpu占有率是跟分母有关。

问题是

    dly = 0u;
    if (OSCfg_TickRate_Hz > OSCfg_StatTaskRate_Hz) {
        dly = (OS_TICK)(OSCfg_TickRate_Hz / OSCfg_StatTaskRate_Hz);
    }
    if (dly == 0u) {
        dly =  (OSCfg_TickRate_Hz / 10u);
    }

   OSTimeDly(dly,                                              /* Determine MAX. idle counter value                    */
              OS_OPT_TIME_DLY,
              &err);


执行上的延时是  系统只运行 idle 任务, 在idle里 OSStatTaskCtr++,  问题是 这段时间 OSStatTaskCtr 要是溢出了怎么办,  一般 dly 都是10hz  100ms,  

100ms cpu 连续对一个变量++, 会溢出啊,   
OSStatTaskCtr 是U32的。


2:
理论上在 OSInit(&oserr); 后 运行  OSStatTaskCPUUsageInit 就行了,  可是问什么 一定要在一个用户任务开始 前 运行  OSStatTaskCPUUsageInit 呢?

OSStatTaskCPUUsageInit 就是要找到 单位时间全部执行 idle 任务时 OSStatTaskCtrMax 这个变量, 可是 OSInit(&oserr) 后 idle 已经创建了,






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-8-18 16:42:55 | 显示全部楼层
1、现在常用的处理器还做不到让32bit变量在100ms里让变量溢出,他需要高达40GHz的主频才有希望,而且OSStatTaskCtr++是单周期完成的情况下。

2、就是要在当前最高优先级任务里面执行,防止任何其它任务干扰。
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
 楼主| 发表于 2021-8-19 00:20:04 | 显示全部楼层
谢谢大佬。
第一个 理解了,
但是第二个,  如果没有任何一个用户任务,然后 OSTimeDly  不就相当与全部 在 idle 里了吗,  也达到目的了,
事实上 必须要在一个用户任务里来 启动 OSStatTaskCPUUsageInit () 函数。
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
 楼主| 发表于 2021-8-19 00:23:39 | 显示全部楼层
谢谢大佬
第一个理解了,
但是第二个还是有点不理解。
OSInit(&oserr); 后已经有idle了,再 运行  OSStatTaskCPUUsageInit 。  里面遇到 OSTimeDly 后不就是 到idle里了吗。
事实上 必须要在 一个用户任务里  调用OSStatTaskCPUUsageInit  才行。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-8-19 08:37:54 | 显示全部楼层
郭震2009 发表于 2021-8-19 00:23
谢谢大佬
第一个理解了,
但是第二个还是有点不理解。

第2个问题,一定要OS启动后才可以统计的,否则任务切换等功能是无法正常执行的,也就是创建了一个启动任务后,在启动任务里面使能。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-8-19 08:44:11 | 显示全部楼层
郭震2009 发表于 2021-8-19 00:23
谢谢大佬
第一个理解了,
但是第二个还是有点不理解。

QQ截图20210819084322.png
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
 楼主| 发表于 2021-8-19 09:52:38 | 显示全部楼层
谢谢..  
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 16:50 , Processed in 0.307091 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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