walnutcy

FreeRTOS与uCOS-II的空闲任务在功能上有什么差别呢?(原创)

0
阅读(5025)

当我们调用vTaskStartScheduler()以启动FreeRTOS时,我们跟着代码向下看时就会发现,OS会自动创建一个空闲任务,名字就叫prvIdleTask,这个与uCOS-II中的空闲任务---OS_TaskIdle有什么差别呢?
大家都比较熟悉uCOS-II,其空闲任务的代码如下:

发现uCOS-II只是完成了一个计数功能,及一个钩子函数的调用。

我们再来看看FreeRTOS的idle任务,代码如下:
可以看到,prvCheckTasksWaitingTermination 首先会检测有没有任务要删除,并处理;(顺便提一下:宏configUSE_PREEMPTION的作用是配置需不需在时钟中断里进行任务切换,配置为0即为不可剥夺型,就在idle中检测有没有任务已经就序),接下来就根据配置进行任务切换;

其中( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( unsigned portBASE_TYPE ) 1 )这里是判断有没有与idle一样优先级的任务需要分时切换运行,这个是必须的,也正是因为有了这样的处理(别的地方也有类似的处理),才可以同级任务可以分时调度。

当然,我们配置一下:configUSE_IDLE_HOOK=1,我们也可以在FreeRTOS里添加空闲任务的钩子函数。
 
由于FreeRTOS设计的晚于uCOS-II,所以有些地方是优于uCOS-II的,所以希望更多的朋友来参与自由嵌入式OS的学习与使用。  Free意味:自由,而非字面意义:免费。

当然,FreeRTOS不只是自由,也是免费供大家使用的。