中级会员
- 积分
- 370
- 金钱
- 370
- 注册时间
- 2017-8-3
- 在线时间
- 38 小时
|
ucos是一个可剥夺性内核的操作系统。所以每一个任务都必须有一个优先级。ucos操作系统中任务的优先级使用一个8位整型数据来表示的。比如我们的0,1,2,3这些数,UCOS任务优先级的取值范围为 0 - OS_LOWEST_PRIO之间,数字越小,优先级越大。
静态优先级
这个优先级被分配以后,它在任务的运行过程中,或者说在这个系统的运行过程中,它的优先级就不能变了,比如说,我们把这个优先级分配为2,那这个任务在运行过程中就一直为2,没办法变成其他的优先级。
动态优先级
在任务的运行过程中,它本身是2这个优先级,但是在运行过程中,它还可以变成3,变成4,变成n这个数,那这个过程就被称为动态优先级,也就是说这个优先级在系统的运行过程中,会出现一个可以变化的过程,ucos是一个支持动态优先级的一个系统,也就是说,我们的ucos可以在系统运行的过程中,来更改一个任务的优先级,这点我们需要注意。
对任务优先级分配首先需要做的有哪些事情呢?
假设系统中有1,2,3,4,5,这5个任务,第一个任务对我们开关的输入信号进行扫描,第二个任务处理我们的按键,第三个任务处理我们的串口通信,第四个任务进行我们的系统逻辑处理,比如我们的开关量输出,第五个任务运行我们的LCD屏显示,假设我们对这5个任务分配优先级怎么分配呢?
第一个我们必须把前3个任务的分配优先级要比后两个要高,为什么呢?
因为从逻辑上来说,我们是首先进行开关量扫描,进行按键处理,进行串口通信,接下来,才进行逻辑处理,因为在逻辑处理当中,我们有可能用到开关量扫描,按键处理,和串口等等这些信息,所以说我们分配优先级的时候前3个任务的分配优先级要比后两个要高,对于这个输出和LCD屏显示,我们来看看这两个怎么处理,首先一般来说LCD屏显示是一个比较缓慢的过程,因为LCD屏显示是一个慢速的设备,那第四个逻辑处理和开关量输出运行速度比较快,那我们就把第四个的优先级要比第五个的高一点,那也就是说,对于一个任务,它运行的时间越短,分配的优先级越高,这是为什么呢?
非常简单,因为我们刚刚说了ucos是一个可剥夺性内核,也就是说,如果有高任务在运行,那么这个低任务它是没办法运行的,那如果这个任务占用的时间比较少,我们就把它放到一个较高的任务上,那它就能很快的执行完毕,这样我们的CPU就可以较快的执行一些其他的任务了,这个是我们在使用优先级分配的一个问题,优先级的分配不是那么容易的,我们对一个比较好的操作系统要好好来考虑这个优先级的分配,如果优先级的分配的不好,就可能出现——优先级反转。
任务优先级分配的原则
1、对于实时性要求高的任务应该分配较高的优先级。
比如我们刚刚举例的串口运行任务,我们都知道当串口接收到一个数据以后,它需要在一定的时间内把这个数据处理完,并且返回到上位机,上位机是不可能一直等待这个数据的,所以说我们对这个串口的执行它就有一个时间的要求,也就是实时性要求较高,那对于这个任务,我们就要分配一个较高的优先级。
2、对于运行速度较快的任务应该分配较高的优先级。
3、任务在逻辑之前的要分配较高的优先级。
就是我们刚刚说的,我们首先是扫描开路,扫描按键,接下来我们才能进行逻辑的处理。所以说我们的扫描开路,扫描按键要比逻辑处理的优先级要高,否则的话,我们还没有进行开关量扫描,已经开始处理逻辑了,这个时候,就发生了一个错误。
原文链接:http://www.maiziedu.com/wiki/iot/ucospriority/
|
|