UCOS中的OSStatInit()函数

UCOS启动后,若配置了统计任务,会调用OSStatInit()。该函数应在首个且唯一任务中调用,以确保统计的准确性。OSStatInit()会进行两次延时,第一次同步系统时钟,第二次让空闲任务计数,以计算CPU利用率。不正确调用可能导致任务调度问题。
摘要由CSDN通过智能技术生成

ucos启动以后,会建立两个任务,空闲任务和统计任务(如果配置了的话),我们经常会在代码里看到OSStatInit(),其实这个函数使用的时候要小心了。
作者原著中提到,OSStatInit()要在建立的第一个,并且只有一个任务的时候调用,所以会经常见到下面的结构:
int main(void)
{
OSInit();


OSStart();
}

void AppTask(void *pdata)
{

}

这样做是因为统计任务计算CPU利用率的需要。

之所以说,调用这个函数要注意,主要原因就是因为在OSStatInit()中调用OSTimeDly发生了任务的调度,而这一点特别容易被忽略掉。

 

----------------------------------------------------------------------

----------------------------------------------------------------------

void OSStatInit (void)

#if OS_TASK_STAT_EN > 0
void OSStatInit (void)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif


OSTimeDly(2);
OS_ENTER_CRITICAL();
OSIdleCtr = 0L

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值