uC/OS-III统计任务堆栈、CPU使用率

1、读取任务堆栈使用函数

OSTaskStkChk(&TaskBStkTCB,&stk_free,&stk_used,&err);

 

Void OSTaskStkChk(OS_TCB *p_tcb,CPU_STK_SIZE* p_free,CPU_STK_SIZE*p_used,OS_ERR  *p_err); 

调用上面这个函数就能获取到指定任务的堆栈使用量。其中

*p_tcb:指向任务的TCB块

*p_free:任务空闲的堆栈字节数

*p_used:任务使用的堆栈字节数

*p_err:函数执行结果代码

 

特别提示,如果想要使用这个功能,那么必须在os_cfg.h这个操作系统配置文件中打开宏:

#define OS_CFG_STAT_TASK_STK_CHK_EN     1u  /* Check task stacks from statistic task 

 

OSTaskStkChk(&Core_Page_TCB,&free,&used,&err); 

printf("Core_Pageused/free:%d/%d usage:%%%d\r\n",used,free,(used*100)/(used+free));


2、用系统OS_TCB读取统计任务堆栈、CPU使用率


Static  void  DispTaskInfo()
{
	OS_TCB  *p_tcb;
OS_ERR  err;

CPU_SR_ALLOC();

CPU_CRITICAL_ENTER();
p_tcb = OSTaskDbgListPtr;
CPU_CRITICAL_EXIT();

While(  p_tcb != (OS_TCB *) 0  ){
	TaskCPU = (float) p_tcb -> CPUUsage / 100;//追踪任务的CPU使用率
	freeStk = p_tcb -> StkFree;//空闲堆栈,任务尚未使用的堆栈
	usedStk = p_tcb -> StkUsed;//已使用的堆栈(任务堆栈的最大使用量)
	strcpy( task_name, p_tcb -> NamePtr);//任务名

	CUP_ALL = (float) OSStatTaskCPUUsage / 100; //应用程序的CPU总的使用率

	CPU_CRITICAL_ENTER();
p_tcb = p_tcb -> DbgNextPtr; //指向下一个任务的TCB
CPU_CRITICAL_EXIT();

}
}


3、uC/OS-III的统计任务由OS_CFG_STAT_TASK_EN(在os_cfg.h中)控制

 

在main()函数创建的第一个也是唯一一个应用任务中调用

OSStatTaskCPUUsageInit(),  

只能在调用OSStatTaskCPUUsageInit()函数之后才能创建其他任务

 

OSStatTaskCPUUsage这个变量表示应用程序的CPU总的使用率





  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值