1.5任务优先级
每个任务都会运行一个时间片。
要能够选择下一个运行的任务,调度器需要在每个时间片的结束时刻运行自己本身。一个称为心跳中断的周期性中断用于此目的。时间片的长度通过心跳中断的频率进行设定,心跳中断频率由FreeRTOSConfig.h中的编译时配置常量configTICK_RATE_HZ进行配置。如果,configTICK_RATE_HZ设为100hz,则时间片的长度为10ms。
1.6扩充非运行态
任务分为运行态和非运行态。非运行态包括就绪态、挂起、阻塞。
延迟函数为:void vTaskDelay( portTickType xTicksToDelay );
xTicksToDelay 延迟多少个心跳周期。调用该延迟函数的任务将进入阻塞态,经延迟指定的心跳周期数后,再转移到就绪态。
举个例子,当某个任务调用 vTaskDelay( 100 )时,心跳计数值
为 10,000,则该任务将保持在阻塞态,直到心跳计数计到
10,100。
常数 portTICK_RATE_MS 可以用来将以毫秒为单位的时间值转
换为以心跳周期为单位的时间值。
来源:#define portTICK_RATE_MS portTICK_PERIOD_MS
#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )