AutoSAR系列讲解(实践篇)7.5-OS原理进阶(上)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xyfx_fhw/article/details/102658379

OS原理进阶(上)

->返回总目录<-

4.8节的时候,就稍微讲了一下OS,当时还挖了坑,说详细的内容放在实践篇中来讲,那么博主准备在这里将这个坑填上。如果对OS有点生疏了,可以回头再看看4.8

一、Tasks

AutoSAR一共规定了两种Task——Basic和Extended的Task,主要区别就是前后者分别有3和4个状态机(Extended多了一个等待状态)。

1、基础任务(Basic Task)

当启动操作系统后,所有的Task都进入到挂起状态;然后由用户去触发需要执行的Task(一般在DaVinci中都有配置,可以生成代码,比如配置成初始化执行或者100ms周期执行);被触发的Task都直接进入准备状态,等待被OS调用;这时OS会根据Task的优先级来调度Task(如果这时有高优先级的Task进入准备状态了,OS就会暂停正在执行的Task,优先让高优先级的Task执行,后继续执行被暂停的Task,类似于中断嵌套)。
在这里插入图片描述

2、扩展任务(Extended Task)

但是基础任务有一个缺陷:比如我们有两个Task,我的高优先级Task在执行中需要一个ADC的数据,但是我们的ADC配置成了1秒采样一次,而我们的高优先级Task就需要循环等待1秒ADC数据更新,低优先级任务此时却无法执行,就白白浪费了1秒CPU资源。
在这里插入图片描述
扩展任务比基础任务多了一个等待状态,这个状态就是当Task正在运行的时候,突然需要一个事件(比如刚刚的ADC数据更新),那么在等待这个事件的时候Task进入等待状态并释放CPU资源,低优先级的Task就可以继续占用CPU;当ADC数据更新事件来了,那么再让我们在等待状态中的Task进入准备状态,由于优先级高,那么再进入运行状态

二、Alarms

上面说的Task从挂起状态到准备状态可以由一个配置好的周期触发完成,而这个周期就是有Alarms完成的。Alarms顾名思义是闹钟,作用就是设置一个周期定时,但不光能用来触发Task,还可以用来设置一个Event事件(就是上面扩展任务那个Event事件)或者Call一个回调函数。
而Alarms的设置可以是在DaVinci中直接配置,或者在Task中修改设置也是可以的。Alarms的时间基准是通过由硬件定时器产生的Tick Time决定的,每个Tick Time是多少时间可以在DaVinci中配置。每来一个Tick Time,System Counter便加1,加到预设的值,Alarm就被触发了
在这里插入图片描述

三、Interrupts

中断大家都熟悉,需要注意的是,中断的优先级始终高于Task,而中断的优先级中一类中断大于二类中断;另外还需要注意的是,周期性Task和周期性中断都能做周期处理,但是在周期要求严格的情况下,最好用中断,因为周期性Task由于操作系统、调度等原因往往时间不是很准确(比如大家可以试试用周期Task模拟出一个100k的PWM,可以观察其周期的波动)

1、一类中断(Cat1)

不会访问OS服务,中断结束后直接返回中断处(就和我们常用的单片机中断一样,但我们更常使用的是二类中断)。这里OS依然按照正常的调度执行

2、二类中断(Cat2)

会访问部分OS服务(一些OS服务是不允许的,比如TerminateTask),中断结束后会发生一次OS的重新调度

3、对比

是不是有点听不懂,没关系,我们依然上图。其实就是多了一个OS调度的立即执行
举个例子,我们有两个Task:Task1(周期1s),Task2(周期100ms,优先级高),当前时刻正在执行Task1,突然来了中断(假设中断执行时间极短):
一类中断: 由于不允许使用OS服务,因此在一类中断中不能调用Task2触发函数,只能在退出中断后回到Task1,然后等待OS应该调用Task2的时候再调用
二类中断: 因为允许使用OS部分服务,这时我们在二类中断中写入了Task2的触发函数,那么在中断结束返回的时候会直接发生一次调度,由于Task2被触发了,优先级又高,那么就直接进入Task2运行,等Task2运行结束,再返回Task1继续运行(如下图的2情况);当然,在中断中也可以不触发其他Task,OS调度也就依然返回到Task1中去(如下图的1情况)
在这里插入图片描述

四、Inter OS Application Communicator(IOC)

是在内存中开辟了一个被保护的IOC区域,用于跨核通信。该区域支持多输入多输出,由OS管理,在DaVinci中一般是自动生成无需修改,这里仅作了解

五、OS Resources

当至少两个Task并行访问同一个资源的时候(比如双核CPU),很可能出问题,OS Resources就是用来防止并行访问出错,也是了解即可,机制很简单,锁住就行,如下图(其实为了防止死锁现象,使用了一种优先级上限协议机制,这里不做细讲,大家有兴趣的话可以留言,博主单独写个补充出来)
在这里插入图片描述

附:返回总目录的传送门如下
->返回总目录<-

猜你喜欢

转载自blog.csdn.net/xyfx_fhw/article/details/102658379