0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文入门AUTOSAR OS

jf_EksNQtU6 来源:ZOTECK 2023-06-29 10:34 次阅读

Autosar Os overview

Autosar Os 在Autosar 框架中上至RTE 下至驱动,中间可以和BSW 基础模块进行交互。是整个autosar 框架下最重要的组成部分。

48fb10ce-159b-11ee-962d-dac502259ad0.png

其中Syser Services 为一些系统服务,不属于操作系统。下文仅对 Os 进行描述

OS 与 BSW 各模块关系

虽然说OS 是整个框架的灵魂,但是也有极少数的BSW 模块不与OS 直接交互。换句话说,其他BSW 模块在改动的时候,是需要考虑一下OS 对其的影响,和它对OS 的影响。

4945152a-159b-11ee-962d-dac502259ad0.png

这里可以看到除了cdd 都是无限制的与os交互。只有cdd 是有限制的和os 进行交互。

OS 的类别与其功能

AUTOSAR OS 和 OSEK OS 都是为汽车领域而开发的实时操作系统。虽然它们都致力于提供实时性能、可靠性和稳定性,但其设计理念和实现方式有所不同。AUTOSAR OS 旨在提供更高级的软件体系结构和更多的配置选项,以支持更复杂的汽车软件系统;而 OSEK OS 更加简单和轻量级,适用于较小规模的汽车电子系统。两者可以共存,也可以相互补充,以满足不同汽车应用的需求。

49739f76-159b-11ee-962d-dac502259ad0.png

TASK

OS 的task 分为两种。

-- 基本任务

-- 扩展任务

其主要的区别就是有无waiting状态。这里先表示一下基本状态,下面对其使用栈详细描述可以按需在实际架构中设计,使用。

49bb6b4e-159b-11ee-962d-dac502259ad0.png

TASK - 抢占机制

01非抢占

这里可以看出,当任务被设定为非抢占的时候,当任务没有完成时,即使高优先级的任务到来,也无法将其抢占。

一般情况下我们可以把初始化的任务,以及一些模式切换时候,必须进行的一些操作,这类任务设计成非抢占的任务。

49e80834-159b-11ee-962d-dac502259ad0.png

02抢占

为了更好的利用OS 来压榨硬件资源,大部分的任务都会被设计成抢占式任务。一般的原则,重要的任务优先级高,需要运行时间较短的任务优先级高。

4a0de874-159b-11ee-962d-dac502259ad0.png

03合作

这里就很灵活,但是需要在代码过程中设计好什么时候让出CPU。但是处理得好的话,会拖慢CPU, 无法最大限度的压榨硬件,高优先级的任务被耽误。

4a29eb96-159b-11ee-962d-dac502259ad0.png

#include 
TASK(Cooperative)
{Function1();
  Schedule();/* Allow preemption */
  Function2();
  Schedule();/* Allow preemption */
  Function3();
  Schedule();/* Allow preemption */
  Function4();
  TerminateTask();
}

任务在配置过程中最重要的下面几个参数,需要注意。这里尤其要注意使用栈的大小。因为这个真的有可能会让软件运行奔溃。其他的参数最多是运行不正常。

4a41054c-159b-11ee-962d-dac502259ad0.png

TASK - 栈的使用

Autosar os的栈使用是单一栈策略。假设定义了32k的栈。那么所有的task都使用这一个大的栈空间。那就是说,当有任务抢占的时候,栈是叠加使用的。下面是

抢占时候使用的栈情况

4a8d11bc-159b-11ee-962d-dac502259ad0.png

这里可以看出来,当有高优先级的任务运行的时候,栈的使用空间是一直增大的。这时候就需要注意上面定义的32k 够不够用了。因为他们所有的task公用一个栈。

下面是非抢占时候使用栈的情况。

4a95f6d8-159b-11ee-962d-dac502259ad0.png

这里就相对简单多了,栈的使用就是和当前运行的task所需要的栈的情况是一样的。

前面说到扩展任务的情况呢。

4ac4ca44-159b-11ee-962d-dac502259ad0.png

这里操作系统会根据静态配置的任务使用的栈,进行预留。换句话说就是配置完扩展任务后,os 根据优先级比扩展任务优先级高的任务使用栈的最大总和,预留一下。把扩展任务的栈至于栈底 + 最大使用量。当扩展任务到running状态后,直接就在规定的栈地方运行。所以这里很考验前面的所有task的栈,如果是使用超了,这时候程序必然就崩了。

中断

Interrupt

Category 1

•Os 无法给一类中断提供服务

•一类中断不与Os交互

•一类中断优先级高于Os 以及所有的二类中断

•可以通过Os 接口对一类中断进行enable/disable

Category 2

•二类中断受到Os管控

•硬件中断向量指向Os内部

•有限制使用os 接口不允许 TerminateTask, WaitEvent, ClearEvent, Schedule, ChainTask

下图可以看出来一类中断时独立于os的,高于os的。根据不同的芯片是不同的,有的芯片的中断优先级是组类别,有的是独立的。也就是说中断是否可以嵌套。

4b368152-159b-11ee-962d-dac502259ad0.png

下面是当二类中断发生,这时候我们的os将会怎么处理呢。

当硬件终端触发,并且ICU模块处理完成之后,到达了OS 。这时候OS 根据静态配置进行操作,对上下文进行切换与保存现场。

4b4c88b2-159b-11ee-962d-dac502259ad0.png

在配置过程中很简单,但是对于实际的操作我们需要注意优先级,一般情况我们都会使用二类中断。这样会减少os的影响。减少系统的不可控性。

4b72ae48-159b-11ee-962d-dac502259ad0.png

如何有效率的使用中断。

#include 
ISR(InefficientHandler) {
/* Long handler code. */
}


#include 
ISR(EfficientHandler) {
ActivateTask(Task1);
}
TASK(Task1) {
/* Long handler code. */
TerminateTask();
}


#include 
ISR(Interrupt1) {
/* Dismiss the interrupt where required */
/* Rest of the handler */
}

异步处理,不将中断的回调一直处理完。而是激活一个task,进行处理,当然这也是要根据实际场景进行设计。

resource

Resource 基础介绍

•Standard resource 标准的二进制状态

•Linked resource 可以嵌套的二进制状态

•Internal resource 以任务为基础的二进制状态

4bcf418a-159b-11ee-962d-dac502259ad0.png

Standard resource 标准的二进制状态 具体使用

#include 
TASK(Task1) {
...
GetResource(Resource1);
/* Critical section. */
ReleaseResource(Resource1);
...
TerminateTask();
}

代码片段:可切换语言,无法单独设置文字格式

可以看出这类是最简单的,一个get 一个 release. 中间的 就是会被锁住的资源。其他地方无法进行访问。需要这个release之后才可以。

Linked resource 可以嵌套的二进制状态

#include 
GetResource(Resource1);
   GetResource(Resource2);
     GetResource(Resource3);
     ReleaseResource(Resource3);
   ReleaseResource(Resource2);
ReleaseResource(Resource1);
}

代码片段:可切换语言,无法单独设置文字格式

和上面很相似,不过必须是一个对应一个。一个解开一个。

举个例子错误使用

#include 
TASK(Write){
 /* Highest priority .*/
 WriteBuffer();
 GetResource(Guard);
 BufferNotEmpty = True;
 ReleaseResource(Guard);
 ChainTask(Read);
}
TASK(Read){
/* Lowest priority. */
 ReadBuffer();
 GetResource(Guard);
 if( BufferNotEmpty ) {
 ReleaseResource(Guard);
 ChainTask(Read);
 } else {
 ReleaseResource(Guard);
 TerminateTask();
 }
}

tips: 任务结束前,没有release.

Schedule table

区别于rtos, 这里有调度表,属于静态配置的调度器。可以说是一系列的event的组合。

下面也给了schedule table 和 event的对比。用起来相当的方便。

4c0a5d1a-159b-11ee-962d-dac502259ad0.png

这里简单介绍两个schedule table 的api

•Start absolute point

4c5778e8-159b-11ee-962d-dac502259ad0.png

•Start relative point

4caaa0a4-159b-11ee-962d-dac502259ad0.png

一般情况下我们系统里只需要一条schedule table即可。所以这些api 在外部用的也很少。这里只需要直到,如果当架构设计需要多条schedule table的时候,我们可以通过一系列条件,手动的调度起来。让这上面的point 内部的task 以此运行。

配置

4cb65c46-159b-11ee-962d-dac502259ad0.png

配置也相对比较简单。也基本不需要配置,因为在左外SWC 设计,完成RTE 的配置之后。这个table的属性就已经被定义好了。只是通过OS 将其生成代码。

stack monitor 栈监控

最上面提到task的一个配置参数,栈的使用。

4d2d8d7a-159b-11ee-962d-dac502259ad0.png4d4e5a14-159b-11ee-962d-dac502259ad0.png

这里面就是可以激活OS 对栈使用的监控。os将会自动monitor

下面截取一段代码,解释了一下os如何获取栈的使用情况。在使用过程中,我们用户可以利用这个api进行一些自己的monitor.

4d59c8e0-159b-11ee-962d-dac502259ad0.png

当然实现方式千千万,我们还是要了解一下实际的原理。

4daa7038-159b-11ee-962d-dac502259ad0.png

下图可以看出来。不同地方调用 GetStackUsage结果可能是不同的。

所以一般来说,我们可以选择高优先级的任务进行执行该api. 进而获取

time protection 时间保护

对于时间保护我们一般采类似于下面的时间约束。

4e0e2114-159b-11ee-962d-dac502259ad0.png

这是什么意思呢。

1ms的任务 如果在5ms内 没有被执行完,则认为有问题。

3ms的任务 如果在10ms内没有被执行完,则认为有问题。

5ms的任务 如果在15ms内没有被执行完,则认为有问题。

下面有个例子。

4e1a51aa-159b-11ee-962d-dac502259ad0.png

看似是C 没有执行完。确实os 报错 应该报的是C 任务没有规定时间内完成。

但是原因缺失上面的A 和 B。所以实际情况,还是需要根据调度关系进行分析。问题不一定处在报错的任务。

关于配置方面也很简单。

4e44f090-159b-11ee-962d-dac502259ad0.png

memory protection 内存保护

内存保护的机制通过os-application 的 trust 和 non-trust 进行隔离开。

对读写的限制,对运行的隔离。

4e893b1a-159b-11ee-962d-dac502259ad0.png

当其中一个os-application 发生故障,可以独立的关闭其中一个os-application ,其他的os-application 不受影响。

对外设的访问,对内存特殊区域的访问的约束。可以通过trust non-trust 来约束。

4e92ea48-159b-11ee-962d-dac502259ad0.png

这样可以一定程度上减少 让os崩溃的可能发生

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2695

    浏览量

    47431
  • 操作系统
    +关注

    关注

    37

    文章

    6801

    浏览量

    123280
  • OS
    OS
    +关注

    关注

    0

    文章

    91

    浏览量

    34750
  • AUTOSAR
    +关注

    关注

    10

    文章

    360

    浏览量

    21552
  • BSW
    BSW
    +关注

    关注

    0

    文章

    15

    浏览量

    3508

原文标题:Autosar Os 一文入门

文章出处:【微信号:谈思实验室,微信公众号:谈思实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TC397如何同时运行CP Autosar OS和FreeRTOS?

    TC397 如何同时运行两个不同的RTOS ,如FreeRTOS 和基于CP AutosarOS
    发表于 01-24 08:31

    TC387配置Autosar OS后主核跑飞了怎么解决?

    使用TC387芯片配置Autosar OS发现主核跑飞了,其他核正常运行OS任务切换,PC指针指向_IF_CONST区域,D[4]寄存器为1,D[15]寄存器为4,根据这两个寄存器用计算规则计算出的TCN和TIN好像有问题,在T
    发表于 03-06 08:24

    AUTOSAR是什么

    AUTOSAR是什么AUTOSAR组织自己的介绍是AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide deve
    发表于 11-10 07:47

    CP AUTOSAR EcuM的相关资料下载

    前言本系列请点击:《搞下CP AUTOSAR入门》所有系列请点击:《汽车电子系列分享》在CP AUTOSAR架构中定义了许多和模式管理相关的组件,其中主要包括EcuM、BswM、Co
    发表于 02-11 07:05

    介绍AUTOSAR支持的四种功能安全机制

    1、AUTOSAR的四种功能安全机制虽然AUTOSAR不是个完整的安全解决方案,但它提供了些安全机制用于支持安全关键系统的开发。本文用于介绍AU
    发表于 06-10 17:33

    AUTOSAR功能安全机制之内存分区与实现

    AUTOSAR中称为Runnables。  Runnables不能由它们自己执行;它们必须分配给 OS的可执行实体。可以通过将Runnables的函数调用插入OS任务主体来执行此类分配。  然后
    发表于 09-19 15:55

    可以在S32DS的S32K144-Q100板上运行的AUTOSAR OS演示程序在哪里?

    可以在 S32DS的S32K144-Q100板上 运行的AUTOSAR OS演示程序在哪里。
    发表于 03-27 07:22

    “E:\NXP\AUTOSAR\S32K_AUTOSAR_OS_4_0_98_RTM_1_0_0sample\standard\sc1”编译时无法生成sample1_cfg.o怎么解决?

    你好:我用例子“E:\NXP\AUTOSAR\S32K_AUTOSAR_OS_4_0_98_RTM_1_0_0sample\standard\sc1”编译时,总是出现无法生成
    发表于 04-06 07:42

    LLCE driver是否可以在非autosar os中运行?

    S32DS、RTD和LLCE CAN驱动有对应的工具版本吗?我想知道,LLCE driver是否可以在非autosar os中运行,是否有关于LLCE Driver +S32DS3.5的文档可以学习。
    发表于 04-18 09:21

    AUTOSAR入门

    AUTOSAR是什么AUTOSAR组织自己的介绍是AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide deve
    发表于 11-05 18:20 20次下载
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>入门</b>

    下CP AUTOSAR 入门 | 04 CP AUTOSAR EcuM 详解

    前言本系列请点击:《搞下CP AUTOSAR入门》所有系列请点击:《汽车电子系列分享》在CP AUTOSAR架构中定义了许多和模式管理相关的组件,其中主要包括EcuM、BswM、Co
    发表于 12-07 18:21 30次下载
    搞<b class='flag-5'>一</b>下CP <b class='flag-5'>AUTOSAR</b> <b class='flag-5'>入门</b> | 04 CP <b class='flag-5'>AUTOSAR</b> EcuM 详解

    RIOT-OS入门 Windows系统下在STM32上运行RIOT OS

    RIOT-OS入门 Windows系统下在STM32上运行RIOT OS
    发表于 12-07 18:51 1次下载
    RIOT-<b class='flag-5'>OS</b><b class='flag-5'>入门</b> Windows系统下在STM32上运行RIOT <b class='flag-5'>OS</b>

    读懂DDS和AUTOSAR Adaptive的集成

    对于使用AUTOSAR制造车辆的公司来说,已经出现了两个不同的平台 - AUTOSAR Classic和AUTOSAR Adaptive 这两个AUTOSAR平台之间互操作性的基础标准
    的头像 发表于 11-02 10:05 2605次阅读

    如何在AUTOSAR OS系统运行时使用事件Event呢?

    AUTOSAR OS系统中,事件用于向任务发送信号信息。本节解释事件是什么,如何配置它们以及如何在运行时使用它们。
    发表于 05-22 10:04 2721次阅读
    如何在<b class='flag-5'>AUTOSAR</b> <b class='flag-5'>OS</b>系统运行时使用事件Event呢?

    AUTOSAR OS操作系统功能特性

    AUTOSAR OS AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是
    的头像 发表于 10-27 16:55 2143次阅读