音响风尚圈

音响风尚圈

关于Autosar 操作系统(OS)

admin 214 266

本篇文章将主要以介绍性为主,只是方便大家了解,来介绍Autosar操作系统。希望阅读本篇文章达到的目的是大家可以了解Autosar操作系统中包含的一些基本内容。

我会主要从以下几个方面,让大家快速了解AutosarOS:

1.为什么需要嵌入式操作系统

2.AutosarOs的基本内容

2.1AutosarOs中所有对象的关系

2.2Core

2.3Application

2.4Counter

2.5调度表

2.6Alarm

2.7Task

2.8Interrupt

2.9Event

2.10Resource

2.11Spinlock

2.12IOC

1.为什么需要嵌入式操作系统

早前,在比较简单的嵌入式软件中,一般是不需要操作系统的,相信很多嵌入式开发的小伙伴都了解,在Main函数中,写一个超循环(While),然后加一个定时器,分时间片的方式,定时去执行代码,就完成了简单的调度功能。然而当嵌入式软件变得越来越复杂时,这种简单粗暴的调度方式就无法满足要求了,举个例子,假如有个这样的需求,软件中需要调度的有1ms,2.5ms,3ms,7ms,9ms,11ms,73ms等等不同周期要求的任务时,这个时候,用超循环去执行,你会发现分时间片的方式几乎无法实现(太难了),再举个例子,如果有多个core,多个core之间还有通信的要求,这个时候就需要一个专门的软件来管理了,因此就需要这么一个叫操作系统的软件,来管理这些调度。

上面核心是想引出,所谓操作系统,就是管理系统调度的一个软件组件,以满足复杂一点的调度。下面我会尽可能地通俗简单的,针对OS中每个对象元素进行说明。

2.AutosarOs的基本内容2.1AutosarOs中所有对象的关系

(不画图了,上传有点麻烦,建议大家在草纸上自己画一个,方便理解)

说明1:Task、Interrupt、Alarm、调度表/scheduleTable、Resource、Event我们称他们叫对象(Object)

说明2:【OS包含1~N个Core】--【1个Core包含1~N个Application】--【1个Application包含0~N个Object】

举个小例子,方便大家记住:

OS是一【片】水塘,Core是其中一【个】水塘,Application是水塘里面一个【水箱】,Object就是水箱里面各种鱼。

其实,就这么简单,他们之间主要的包含关系就这样啦,但是水塘-水箱-以及鱼之间的关系咱在下面掰扯掰扯啦。

2.2Core

Core就是我们所说的水塘了,我们都听过我们的手机是什么8core-16core(贼牛逼了),Core其实并不神秘,他就是指向我们的代码,然后一行一行地执行,(这里说说芯片内核)它里面的东西一般有个指令获取单元、指令执行单元以及地址寄存器和数据寄存器,代码在Core上执行过程就是把代码抓过来--翻译一下--计算一下(逻辑运算)--存一下,然后下一条。我们简单总结一下,所谓的Core,其实就是一个可以独立执行代码的单元。

2.3Application

Application就是我们所说的水箱,其实从字面意思理解,它是一个应用,准确点说,它是一个进程。它部署到某一个Core上,它主要的作用就是管理放到其中的对象(也就是管理水箱里面的鱼),为啥要有这玩意呢?鱼直接放到水塘不就可以吗?举个不恰当的例子,假如一条鱼(一个对象)生病了,完啦完啦,还是传染病,那么整个水塘的鱼都遭殃了,如果有个水箱圈起来,那么顶多也就那个水箱的鱼遭殃。再举个例子,假如你手机里面淘宝不能用了,整个手机都变砖头,你会作何感想?所以,Application其实就是一个独立管理一部分OS对象的单元,它可以独立启动,关闭,或重启。那么AutosarOs中,对它还有一个重要的作用,就是功能安全上的应用,这个如果想进一步了解可以留言咨询。

2.4Counter

好吧,水塘水箱的例子,在后面不太适用了,这里我把Counter比作心脏吧,或者对于芯片来说,它就是晶振了,因此它在操作系统的作用就是计时或者计数,一般Counter与芯片的Timer结合起来,Counter的精度决定了操作系统能计时的准确度。

2.5调度表或ScheduleTable

字面意思理解,你可以认为它就是包含了很多调度点的一个表,AutosarOs中一般这么用调度表,比如有1ms2ms3ms三个周期需要调度的任务,那么它会根据公约数,生成一个表,这个表在1ms处调度1ms任务,2ms处调度1ms和2ms任务,3ms处调度1ms和3ms任务,4ms处调度1ms和2ms任务,5ms处调度1ms任务,6ms处调度1ms,2ms,3ms任务,然后按照这样的关系循环,这就是所谓的调度表,目前有部分主流的Autosar开发商使用这种方式进行任务的调度。

插句话:此外,这种ScheduleTable有自己的状态机,这里不做详细介绍,个人认为,相对Alarm的调度方式,ScheduleTable调度方式最大的好处在于调度上可以同步。

2.6Alarm

字面意思理解,警报器,其实它就像我们上课的铃声,到点它就响应。其实操作系统用它来也是做一些定时的事情,比如定时激活一个Task。前面我们讲到ScheduleTable也可以激活Task,那么Alarm和它还是有些区别的,Alarm一般只做一个定时任务,如果有1ms,2ms,3ms的调度任务的话,一般会对应三个Alarm,一个Alarm做1ms定时,定时到了就去激活1ms的任务,然后进行1ms任务的调度,2ms,3ms的任务以此类推进行调度。

2.7Task

其实Task应该是大家都比较熟悉的,AutosarOs中它有些自己的性质,下面说说它都有哪些性质。

Task类型:

BasicTask:包含状态ReadyRunningSusp

ExtTask:包含状态ReadyRunningSusp+Waiting

所谓的扩展task,就是多了一个Waiting状态,因此它一般就是等待一个Event的到来。

符合类:

BCC1:基本Task,不可被重复激活(激活1次,在Ready和Running下不可再激活)

BCC2:基本Task,可被重复激活

ECC1:扩展Task,不可被重复激活

ECC2:扩展Task,可被重复激活

此外Task的调度分为可抢占以及不可抢占,对于可抢占的Task,OS会根据Task的优先级进行排序调度,优先级高的可以抢占优先级低的。

Task就是OS中的一个调度单元,OS的很多内容都是围绕它进行管理的。比如上文提到的AlarmScheduleTable都是用作定时去激活Task,此外下文还是提到Event,其也和Task关联起来用。

2.8Interrupt

中断的概念,对于嵌入式开发的小伙伴来说,应该都比较熟悉,下面我仅仅说明一下在OS中中断的特殊概念。

AutosarOS中将中断分为Cat1和Cat2,即所谓的1类中断和2类中断,所谓的2类中断其实就是完全被OS接管的中断,这类中断的上下文切换,堆栈管理全部由OS管理;而1类中断则不被OS接管,因此它的上下文由自己管理。另外AutosarOs中要求Cat1的中断的最低优先级高于Cat2的最高优先级,也就是说Cat1的中断优先级更高。所以Cat1的中断一般用于时间要求更紧急的场合。

2.9Event

Task

{

A_Function();

B_Function();

C_Function();/*关闭窗口*/

}

还有三章小节,但对AutosarOs已经有个基本了解了,就说到这里吧,想进一步深入了解的,可以看看OsekOsVDX这类文档,或者也可以进行交流