UCOSII cpu利用率实现原理

目的:

介绍UCOSII中 cpu利用率计算方法

使用方法:

1:在启动任务中调用OSStatInit();

2:在合适的地方打印OSCPUUsage,就可以得到当前系统cpu的利用率。要特别注意的是系统调用OSStart()后只有3个任务处于     就绪态,分别是

        1>启动任务

        2>统计任务

        3>空闲任务

         否则的话,就不能保证系统在OSStatInit()中计算得到的OSIdleCtrMax是准确的,因为在此期间会有其它的任务运行。

示例代码如下

#include "print.h" 
#include <stdio.h>
#include "sys_tick.h"
#include "ucos_ii.h"
#include "misc.h"

OS_STK stack_task_start[128];
OS_STK stack_task_start0[128];
OS_STK stack_task_start1[128];

void start_task0(void *p_arg)
{
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr = 0u;
#endif
	for(;;)
	{
   		OS_ENTER_CRITICAL();
		printf("\start_task0 running\n");
		OS_EXIT_CRITICAL();
		OSTimeDly(1);	

		printf("OSCPUUsage = %d\n",OSCPUUsage);
  	}
}	

void start_task1(void *p_arg)
{
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */
    OS_CPU_SR  cpu_sr = 0u;
#endif
	
	for(;;)
	{
		OS_ENTER_CRITICAL();
		printf("\start_task1 running\n");
		OS_EXIT_CRITICAL();
		OSTimeDly(1);		
  	}
}	

void start_task(void *p_arg)
{
	printf("\start_task start\n");
	OSStatInit();	
	
	OSTaskCreate(start_task0,(void*)0,&stack_task_start0[127],5);
	OSTaskCreate(start_task1,(void*)0,&stack_task_start1[127],6);

	OSTaskDel(OS_PRIO_SELF);
	
	printf("\start_task end\n");
}


int main(void)
{	 
	 print_init();
	 SysTick_Configuration();
	
	 OSInit();
	
	 OSTaskCreate(start_task,(void*)0,&stack_task_start[127],4);
	
	 OSStart();	
 
	 while(1)
	 {	       
		 
	 }	     		 
} 

   结果如下

原理:

   1>系统仅仅有空闲任务运行时其在0.1s内运行的次数(Version : V2.92.07版本为0.1s)

   2>系统正常运行后,如果有空闲的话,先调用统计任务(如果其就绪的话),计算CPU利用率,然后将自己睡眠0.1s,之后空闲         任务就一直运行直到其被抢占。

       注:本质就是获得在0.1s内,由于cpu空闲,空闲任务中OSIdleCtr自增的次数,其除以OSIdleCtrMax就是空闲率

 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值