空闲任务
作用:UCOSII总是建立一个空闲任务OSTaskIdle(),在没有其它任务进入就绪态时投入运行。
描述:它的优先级最低,即OS_LOWEST_PRIO,其什么功能也不做,只是不停的给一个32位的OSIdleCtr的计数器加1,当然用户也可以自己单独定制空闲任务做什么功能,使用这个计数器统计任务可以确定现行应用软件实际消耗的CPU时间。
特点:系统默认开启且不可删除。

点击(此处)折叠或打开

  1. void OSTaskIdle (void *pdata)
  2. {
  3.     pdata = pdata;
  4.     for (;;) {
  5.         OS_ENTER_CRITICAL();
  6.         OSIdleCtr++;
  7.         OS_EXIT_CRITICAL();
  8.     }
  9. }
从上面的代码可以看出,计数器加1前后,中断是先关后开的,因为8位及大多数16位微处理器的32位加1需要多条指令,要防止高优先级的任务或中断服务子程序从中打入。
统计任务OSTaskStat()

功能:计算用户应用程序使用了多少CPU时间、现有任务的个数、系统版本号等信息。

使用条件:1、将OS_CFG.H文件的OS_TASK_STAT_EN设为1,建立这个任务,优先级默认为OS_LOWEST_PRIO-1。

                      2、在调用系统启动函数OSStart()之前,用户必须初始化一个任务,在这个任务中调用系统统计初始                   化函数OSStatInit(),之后在建立其它任务。UCOSII的统计任务要求在整个一秒钟内没有其它任务运行。如果在启动多任务之前要建立其它任务,必须保证用户的任务代码监控全局变量OSStatRdy和延时程序(即调用OSTimeDly())的执行,直到这个变量变成TRUE。这表明UCOS的CPU利用率统计函数已经采集到了数据。
3、最好不要将OSStatInit()函数放置在OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL();虽然这样也可以计算任务的个数,系统版本号但无法计算CPU的使用时间。

 

 

在使用UCOSII的任何服务功能以前必须先调用OSInit(),它会建立两个任务:空闲任务和统计任务,前者在没有其它任务处于就绪状态时运行,后者计算CPU的利用率等。

 

在启动多任务OOStart()之前必须建立至少一个任务,否则将导致崩溃。
下面例程以正点原子的例程改写:

空闲任务和统计任务-LMLPHP1、统计任务+任务调度.zip

09-13 05:38