裸机 / OS
裸机编程:单任务系统的方式,框架是在main( )函数中循环的处理,实时性差,在大循环中再紧急的函数没轮到只能等着,虽然在中断中处理一些紧急任务,但是在大型嵌入式系统中,这样的单任务系统就会显得力不从心。
多任务系统:在多任务系统中,相同优先级的任务各自运行一段及短的时间(时间片调度),高优先级的任务可以抢占低优先级的任务的CPU控制权(抢占式调度),有了优先级的多任务系统,用户可以将紧急事务放在优先级高的地方,大大提高了任务响应的实时性。
任务状态
运行态:正在运行的任务的状态;
就绪态:任务已经可以执行,但是还没有获得CPU使用权;
阻塞态:任务在等待delayTime或者等待信号量/事件组.....造成任务无法运行的状态
挂起态:通过vTaskSUspend( )函数挂起的函数,无法运行;
具体概念在这里不详细阐述。
任务优先级
任务优先级被分为 0 ~ configMAX_PRIORITIES-1 定义在FreeRTOSConfig.h中,在STM32中的硬件计算前导指令中,最大支持32位数,所以使用硬件计算下一个任务的情况下configMAX_PRIORITIES最大为31。
需要注意的是,在RTOS中优先级的规则是数字越小的优先级越低,即 0 是最低的优先级,这与常见的中断优先级规则相反。
任务调度方式
FREERTOS支持的调度方式有:抢占式调度、时间片调度、协程式调度。
协程式调度已不再开发。
抢占式调度主要针对不同优先级的任务。
时间片调度主要针对同优先级的任务。