作用:UCOSII总是建立一个空闲任务OSTaskIdle(),在没有其它任务进入就绪态时投入运行。
描述:它的优先级最低,即OS_LOWEST_PRIO,其什么功能也不做,只是不停的给一个32位的OSIdleCtr的计数器加1,当然用户也可以自己单独定制空闲任务做什么功能,使用这个计数器统计任务可以确定现行应用软件实际消耗的CPU时间。
特点:系统默认开启且不可删除。
点击(此处)折叠或打开
- void OSTaskIdle (void *pdata)
- {
- pdata = pdata;
- for (;;) {
- OS_ENTER_CRITICAL();
- OSIdleCtr++;
- OS_EXIT_CRITICAL();
- }
- }
统计任务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()之前必须建立至少一个任务,否则将导致崩溃。
下面例程以正点原子的例程改写: