Autosar学习笔记——(四)BSW之操作系统

Autosar学习笔记——(四)BSW之操作系统


随着汽车电气化程度越来越高,电子控制系统越来越复杂(嵌入式系统,ECU),汽车软件呈现出任务多样化、周期复杂化、分层调用嵌套、多核系统引入等特点,为了适应这些新特点就引入了操作系统。它管理任务和事件的调度、不同任务之间的数据流,并提供监视和错误处理功能。操作系统为实时应用提供所有基本服务,包括中断处理、调度、系统时间和时钟同步、本地消息处理,以及错误检测机制。

1. AUTOSAR OS特点

AUTOSAR OS的基本特征:

  • 静态配置
  • 推断系统的实时性能
  • 提供基于优先级的调度策略
  • 运行时提供保护功能(内存、定时等)
  • 无需外部资源,可嵌入低端控制器

正是因为AUTOSAR OS这些独特的特点,所以与我们常见的Linux有所不同,主要体现在:

  • 在运行时不会动态创建新任务
  • 属于预编译配置变体,必须在编译之前定义所有任务
  • 操作系统没有动态内存管理,也没有用于手动控制任务的shell

2.AUTOSAR OS与OSEK OS的关系

我们在Autosar学习笔记——(二)BSW模块中提到AUTOSAR OS的核心功能是基于OSEK OS的,是对OSEK OS的继承和发展,但是具有多个扩展性能。

OSEK OS 特别提供了以下特性支持AUTOSAR:

  • 基于优先级调度
  • 处理中断的功能
  • 中断高于任务的优先级
  • 防止错误使用OS 服务的保护措施
  • StartOS和StartupHook 启动接口
  • ShutdownOS和ShutdownHook 关闭接口

具体的AUTOSAR OS的可扩展级别:
在这里插入图片描述

SC1SC2SC3SC4
支持多核支持支持支持支持
内存保护支持支持
时间保护支持支持
调度表支持支持支持支持
OSEK OS支持支持支持支持
  • SC1:SC1包含了OSEK OS,并定义了标准的计数器和轮询式调度表。
  • SC2:SC1 + 时间保护。时间保护就是当一个任务时间过长时会被停止,防止其影响其他任务的实时性。
  • SC3:SC1 + 内存保护。针对未经授权访问安全相关组件的内存保护。
  • SC4:SC1 + 时间保护 + 内存保护。显然SC4安全性最高。

3. AUTOSAR OS的对象

Autosar OS提供基于优先级的调度策略,具有可抢占属性和同步的机制,通过事件和资源的属性来实现。AutosarOS提供以下许多的对象进行多任务执行的管理,这些对象及其配置是AUTOSAR OS的重点内容,下面我们先简要介绍,后面再补充。

Task:任务,关于汽车软件中的任务的定义可以参考汽车软件RTOS概念——进程,线程,任务
Autosar OS的Task分为两种类型:

  • Basic Task:包含状态Ready,Running,Suspend;

这里是引用
Basic Task调用过程:当OS启动后,所有的Task被挂起,用户根据需求去触发需要执行的Task(通过在软件中配置来实现,配置后生成代码,比如配置成初始化执行或者周期执行等),被触发的Task进入准备状态,等待被OS调用运行,OS会根据优先级顺序来调度Task,如果在运行当前Task时,有优先级更高的Task进入准备状态,则停止当前Task,先执行优先级更高的Task,执行完后接着执行当前Task,像中断。

  • Extend Task:包含状态Ready,Running,Suspend和Waiting

这里是引用
Extend Task调用过程:当Task在运行的时候需要一个事件(比如需要更新后的ADC数据),Task可以进入等待状态,让出CPU资源,让优先级低的Task先执行,当事件已经完成(比如收到更新后的ADC数据),Task再进入准备状态,由于优先级比当前Task高,所以可以进入运行状态继续执行。

ISRs:interrupt service routine,即中断。中断的概念和嵌入式系统中的类似。
⑴ 在AUTOSAR OS中中断有两种类型:

  • Cat1 中断,即所谓的1类中断,1类中断则不被OS接管,也不会访问OS服务,因此它的上下文由自己管理,执行完后直接返回中断处,和单片机中断一样。另外Autosar Os中要求Cat1的中断的最低优先级高于Cat2的最高优先级,也就是说Cat1的中断优先级更高。所以Cat1的中断一般用于时间要求更紧急的场合。要知道,中断有比任何任务都高的优先级,即中断可以抢占任务

  • Cat2 中断,即所谓的2类中断,2类中断其实就是完全被OS接管的中断,这类中断的上下文切换,堆栈管理全部由OS管理,能访问部分OS服务,中断结束后会发生一次OS的重新调度;

⑵ 举例说明:
假设有Task1,周期为1s,优先级低;Task2,周期100ms,优先级高;
当Task1运行时,来了一个中断(假设中断时间很短)。

  • 如果是1类中断, 由于不能访问OS的服务,无法调用Task2的触发函数,只能在中断结束后返回Task1, 等待OS去调用Task2;
  • 如果是2类中断,由于可以访问OS的部分服务,可以在中断中设置Task2的触发函数,中断结束返回时通过OS调度,触发Task2进入准备状态,又因为Task2优先级高,可以进入运行状态,执行完后返回继续执行Task1。
    在这里插入图片描述

⑶ ISRs和Task的使用注意:在做周期处理的时候周期性ISRs和Task都可以使用,但如果周期对时间要求严格,要优先使用周期ISRs中断,因为由于OS和调度等原因,周期Task并不准确。

Alarms:操作系统用它来设置周期定时。
Alarms的主要作用:

  • 激活一个任务Task。挂起状态的Task可以由配置好的周期触发,转变为准备状态,这个周期就是由Alarms设置。
  • 设置事件(Event)。比如上面Extend Task中更新ADC数据的事件。
  • 调用回调函数。

Alarms的设置可以在DaVinci软件中配置也可以在Task中修改设置。Alarms的时间基准是由硬件定时器产生的Tick Time决定的,而Tick Time可以在Davinci中设置,来一个Tick Time,System Counter就加1,加到预设值Alarms就被触发。
在这里插入图片描述

Applications:从字面意思理解,它是一个应用,准确地说,它应该是一个分区。它部署到某个Core上,主要的作用就是管理放到其中的对象,芯片里的划区也是非常合理的。AUTOSAR OS中分区分为可信的和非可信的

Application modes:用的极少,这里不展开介绍;

Counters:Counter类似于心脏,对于芯片来说,它就是晶振。在操作系统它的作用就是计时或者计数,一般Counter与芯片的Timer结合起来,Counter的精度决定了操作系统能计时的准确度。

Events:事件。在嵌入式操作系统中,事件一般是和任务(Task)绑定一起来实现调度功能的,当然也可以由Alarms来触发。比如,我通过设定某个任务在10ms进程执行,10ms的任务就和该事件一起来实现。

Register Sets:几乎没有使用,暂时不介绍。

Resources:当同一核心下多个Task同时访问资源的时候就会出现问题,Resources通过设置优先级上的限制机制来避免这种问题。
嵌入式系统内部的资源是用来强制任务分组运行的,在分组内部,是没有抢占一说的,即共享资源。当然,中断就不能使用内部分组资源了。共享什么资源呢?比如栈的共用,为了降低系统的负荷,我们可以让同分组的任务共用分配的栈资源。
在这里插入图片描述

Schedule tables:调度表,可以将其理解为包含了很多调度点的表,Autosar Os中一般这么用调度表,比如有 1ms,2ms,5ms 三个周期需要调度的任务,那么会根据公约数,生成一个表,这个表在1ms 处调度1ms任务,2ms处调度1ms和2ms任务,4ms处调度1ms和2ms任务,5ms处调度1ms和5ms任务,10ms处调度1ms,2ms,5ms任务,然后按照这样的关系循环,这就是所谓的调度表。目前有部分主流的Autosar开发商使用这种方式进行任务的调度。当然,Schedule Table有自己的状态机,Schedule Table调度方式最大的好处在于保持调度的同步性。

Spinlocks:没有项目使用,暂不介绍。

参考文章:AutoSAR系列讲解(实践篇)7.5-OS原理进阶(上)
AUTOSAR之操作系统概览

  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值