FreeRTOS的任务调度一般使用系统滴答时钟,每次系统节拍时钟发生中断后加1,用来记录系统节拍时钟中断的次数,内核会将所有阻塞的任务跟这个变量比较,以判断是否超时,若超时意味着等待时间到达,可以执行。
变量xTickCount的数据类型跟具体硬件有关,32位架构硬件一般是无符号32位变量、8位或16位架构一般是无符号16位变量。即便是32位变量,xTickCount累加到0xFFFFFFFF后也会溢出。因此,在程序中要判断变量xTickCount是否溢出。如果溢出(xTickCount为0),则调用宏taskSWITCH_DELAYED_LISTS()交换延时列表指针和溢出延时列表指针。
taskSWITCH_DELAYED_LISTS()
{
List_t *pxTemp;
configASSERT( ( listLIST_IS_EMPTY( pxDelayedTaskList ) ) );
pxTemp = pxDelayedTaskList;
pxDelayedTaskList =