任务优先级按照任务类型进行安排,遵循以下规则:
1、中断关联性:与中断服务程序(ISR)相关的任务应该安排尽可能高的优先级,这样有利于处理异步时间提高系统的实时性,如果优先级设置的较低,则可能发生由于cpu一直被高优先级的任务霸占,导致在第二次发生中断时还没来的及处理上一次中断发生的事件!导致信号的丢失!
2、紧迫性:紧迫任务要求在规定的时间内完成,有很强的时间关联性,对时间要求较严,在安排紧迫任务的优先级的时候要按照紧迫程度将任务进行划分,越紧迫的任务优先级越高,一般来说,紧迫任务与ISR关联。
3、关键性:任务越关键,优先级越高,道理很简单,如果关键任务安排较低的优先级将不能获得更多的执行机会,导致关键人物得不到执行!关键性就荡然无存!
4、频繁性:越频繁的任务(周期越短)优先级应该设置的越高,以便及时得到执行。
5、快捷性:前面的条件相同相近时,越是快捷的任务优先级越高,这样避免后面的就绪任务延时短。
6、传递性:信息传递的上游任务优先级高于下游任务的优先级。如:信息采集任务的优先级要高于信息处理的优先级
举例说明优先级安排的:
在一个实际项目价值中,模拟信号采集任务,串口接收任务,串口发送任务,键盘监听任务,显示任务。
下面我们分析一下:模拟信号采集任务、串口发送任务、串口接收任务与ISR有关,其中串口接收任务是关键任务也是紧迫任务,对实时性要求最高,而模拟信号采集任务是紧迫任务而不是关键任务,因为即使丢失一次模拟信号的次采集还不至于造成严重的后果。串口任务cpu是主动方,优先级安排低点也可以,只要将数据发送出去就可以。键盘监听任务和显示任务对实时性要求较低。数据处理任务视计算量而定,如果计算量较小可以安排在键盘监听之前,因为它比较便捷。反之安排其后。
这样我们可以这样设定:
任务: 优先级:
串口接收任务 4
模拟信号采集任务 6
串口发送任务 8
数据处理任务 10
按键监听任务 12
显示任务 14
这样可以 #define OS_LOWEST_PRIO 18
优先级安排比较宽松的好处就是方便后续升级,添加任务不需要修改其他部分