首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

关于UC/OS-II中OS_TaskStat()函数的简单有关问题

2012-03-03 
关于UC/OS-II中OS_TaskStat()函数的简单问题函数的核心代码如下:voidOS_TaskStat (void *pdata){INT32Urun

关于UC/OS-II中OS_TaskStat()函数的简单问题
函数的核心代码如下:
void OS_TaskStat (void *pdata)
{
  INT32U run;
  INT8S usage;

  while (OSStatRdy == FALSE) {
  OSTimeDly(2 * OS_TICKS_PER_SEC); /* Wait until statistic task is ready */
  }
  for (;;) {
  OS_ENTER_CRITICAL();
  OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */
  run = OSIdleCtr;
  OSIdleCtr = 0L; /* Reset the idle counter for the next second */
  OS_EXIT_CRITICAL();
  if (OSIdleCtrMax > 0L) {
  usage = (INT8S)(100L - 100L * run / OSIdleCtrMax);
  if (usage >= 0) { /* Make sure we don't have a negative percentage */
  OSCPUUsage = usage;
  } else {
  OSCPUUsage = 0;
  }
  } else {
  OSCPUUsage = 0;
  }
  OSTaskStatHook(); /* Invoke user definable hook */
  OSTimeDly(OS_TICKS_PER_SEC); /* Accumulate OSIdleCtr for the next second */
  }
}
函数的作用是计算CPU的占用情况,对吧,我知道OSIdleCtrMax是在只有空闲任务时单位时间的计数,而OSIdleCtr应该是当前单位时间内空闲任务计数啊,可是为什么没有体现出这一点。我觉得应该先把OSIdleCtr清零,再延时1秒,这时的OSIdleCtr才可用

[解决办法]
去看看邵贝贝的那本书吧。

热点排行