关于Autosar操作系统(OS)

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

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

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

2. Autosar Os的基本内容

  2.1 Autosar Os中所有对象的关系

  2.2 Core

  2.3 Application

  2.4 Counter

  2.5 调度表

  2.6 Alarm

  2.7 Task

  2.8 Interrupt

  2.9 Event

  2.10 Resource

  2.11 Spinlock

  2.12 IOC

 

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

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

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

2. Autosar Os的基本内容

2.1 Autosar Os中所有对象的关系

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

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

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

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

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

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

2.2 Core

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

2.3 Application

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

2.4 Counter

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

2.5 调度表 或 Schedule Table

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

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

2.6 Alarm

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

2.7 Task

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

Task 类型:

  Basic Task:包含状态Ready Running Suspend

  Extend Task:包含状态Ready Running Suspend + Waiting

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

符合类:

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

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

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

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

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

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

2.8 Interrupt

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

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

 2.9 Event

事件仅仅和上文提到的扩展Task绑定在一起来实现一个调度功能,那么它的应用场景是什么样的呢?其实是随处可见的,比如你按下鼠标左键 点击 【确定】按钮  这就是一个Event,那么你点击了,会发生什么事呢,这就是这个事件发生后,绑定到这个Task后需要调度的事情,比如关闭弹出。虽然嵌入式没有界面,但是意思一样,下面以一段伪代码说明一下:

Task

{

    A_Function();

    B_Function();

    WaitingEvent('"click Confrim");/*点击确定*/

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

}

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

  • 37
    点赞
  • 321
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值