ucos启动以后,会建立两个任务,空闲任务和统计任务(如果配置了的话),我们经常会在代码里看到OSStatInit(),其实这个函数使用的时候要小心了。
作者原著中提到,OSStatInit()要在建立的第一个,并且只有一个任务的时候调用,所以会经常见到下面的结构:
int main(void)
{
OSInit();
OSStart();
}
void AppTask(void *pdata)
{
}
这样做是因为统计任务计算CPU利用率的需要。
之所以说,调用这个函数要注意,主要原因就是因为在OSStatInit()中调用OSTimeDly发生了任务的调度,而这一点特别容易被忽略掉。
----------------------------------------------------------------------
----------------------------------------------------------------------
void OSStatInit (void)
#if OS_TASK_STAT_EN > 0
void OSStatInit (void)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OSTimeDly(2);
OS_ENTER_CRITICAL();
OSIdleCtr = 0L