• 458查看
  • 0回复

[Autosar] AUTOSAR OS概述(一)

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 21-1-2024 10:40:17 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


    目录



      AUTOSAR OS背景

      AUTOSAR OS中的TASK

      AUTOSAR OS中的调度策略

      AUTOSAR OS中的TASK Stack处理


    01



    AUTOSAR OS背景

    在最初接触汽车ECU开发时,提到最多的还是OSEK,比如OSEK NM、OSEK OS等等;而OSEK/VDK操作系统也是最先引入汽车行业,具体可见OSEK OS介绍(一)OSEK OS介绍(二);
    OSEK OS是基于事件触发的操作系统,有以下特性:


      固定优先级调度

      中断处理

      函数StartOS和StartupHook作为启动阶段的通用接口

      函数ShutdownOS和ShutdownHook作为下电阶段的通用接口

    基于事件触发方式为用户在使用时提供了极大的便利,例如当检测到某种错误时产生一个事件,进一步地触发一个runnable。
    AUTOSAR OS就是在OSEK OS的基础上演变而来(可以看OSEK和AUTOSAR的组织者,哈哈哈),同时也引入了一些新的特性。


      在调用StartOS之前或者ShutdownOS之后允许调用服务DisableAllInterrupts,EnableAllInterrupts, SuspendAllInterrupts, ResumeAllInterrupts。

        AUTOSAR OS相较于OSEK OS,在等级定义上也有一定的差异,如下图;

    AUTOSAR OS概述(一)w1.jpg

    OSEK OS
    OSEK OS等级定义如下:


      BCC1:仅仅支持basic task,每个任务只能有一个激活请求,每个优先级只能有一个任务,而所有任务都有不同的优先级

      BCC2:与BCC1相似,与BCC1一样,每个优先级可能有多个任务,并且允许多个请求激活任务

      ECC1:与BCC1相似,支持extended tasks
      ECC2:与ECC1一样,每个优先级可能有多个任务,Basic Task允许多个请求任务激活。
    AUTOSAR OS 扩展等级如下:
    AUTOSAR OS概述(一)w2.jpg
    编辑
    AUTOSAR OS Scalability Classes
    最高等级的SC4,相当于是支持OSEK OS全部特定、调度表、时间同步\保护、内存保护、Trust分区、OS-Application等特性,其强大程度可见一斑。AUTOSAR OS在AUTOSAR架构里处于系统服务这一层级,为ECU的运行提供基础服务。
    AUTOSAR OS概述(一)w3.jpg

            那么AUTOSAR OS 到底提供了哪些功能呢?我将从如下几点描述


      AUTOSAR OS中的TASK

      AUTOSAR OS中的调度策略

      AUTOSAR OS中的TASK Stack处理

      AUTOSAR OS中的alarm和counter关系

      AUTOSAR OS中的event
      AUTOSAR OS中的ISR种类

    02



    Task概念
    在聊Task之前,首先想描述下计算机操作系统中关于进程(Process)、线程(Thread)的概念。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是系统进行资源分配和调度的基本单位。进程是一个动态的概念,是一个活动的实体。普通的计算机可以同步做几件事情,比如“上网”,“看电影”,“打游戏”,就是说可以运行很多进程。但是嵌入式计算机通常设计成只做一件事情,比如在汽车领域,整车控制器VCU,发动机喷油点火控制器ECU,变速箱换挡控制器TCU,车身控制器BCM等。这样类比,传统的一个电子控制单元ECU相当于只运行一个进程。现目前的MCU例如TC4xx、Stella提供虚拟化的技术可以实现多个进程的ECU,这种思路就是各个ECU功能通过硬件虚拟化的技术合理布置在一个ECU中,而这些功能都认为它是在独享这台ECU资源的。线程是OS能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在计算机操作系统里,只强调进程和线程的概念。而在嵌入式操作系统里,任务就是线程的意思。怎么会这样呢?这是因为一个嵌入式系统设计为只实现一个具体功能的是专用计算机系统,在通用计算机系统只相当于一个进程。而且,通用计算机的一个进程可衍生出几个独立进程,好比你可以打开两个Word文档交互编辑。但是,一个汽车ECU不会用软件复制的方法去同时控制两台发动机。因此我们在某些代码中会看到thread,大家也不要疑惑,一般情况,就是task如下:
    AUTOSAR OS概述(一)w4.jpg
    编辑 2.1 Task的具体定义

    先上一个我个人认为很形象的图片
    AUTOSAR OS概述(一)w5.jpg

    所谓任务,就是能够被执行的最基本C函数;同时这些任务对CPU的访问权限是有竞争的,这就引出了任务的优先级概念;任务在执行完毕后释放CPU以供其他任务使用;这种理解角度可能比较新奇,但很有效果;把多个任务想象成多个人物实体,人要使用CPU来处理某种工作,就必须要竞争和释放,这种竞争是有规则的,这就又引出了调度的概念。OS Task的优先级还是源自OSEK OS,根据规范ISO 17356-3定义,数字越小优先级越低,比如0就是最低优先级;优先级取值范围为0..4294967295,但实际上用不到这么多,255够够的了。
    AUTOSAR OS概述(一)w6.jpg

    2.2 Task的状态机(生命周期)

    有了优先级定义,那么Task就必须要有自己的状态,比如当前是否在运行,是否在等待CPU资源释放等。因此,AUTOSAR OS沿用了OSEK OS extended task的四种状态,分别是running、ready、waiting、suspended。


      运行态(Running):处于运行态时,cpu被当前task占用,该task指令被执行;任何时间都只能有一个task处于该状态;

      准备态(Ready):满足转换到运行态的所有前置条件,任务只等待处理器的分配。调度器决定下一步执行哪个ready任务

      等待态(Waiting):处于该状态的任务在等待一个event,该任务不会执行;

      挂起态(Suspended):处于该状态的任务可以被激活。

    AUTOSAR OS概述(一)w7.jpg

    AUTOSAR OS概述(一)w8.jpg
    编辑
    常见的Task代码写法如下:

    #define TASK(TaskName)       void Os_Task_##TaskName(void)

    TASK(Default_Init_Task_Trusted)

    {

    #if defined (BRSMAIN_DEFAULT_INIT_TASK_TRUSTED_CALLOUT)

      BrsTestsuite_BrsMain_Default_Init_Task_Trusted();

    #endif

      Os_InitialEnableInterruptSources(FALSE);

      (void)TerminateTask();

    }

    03



    OS中的调度策略

    在第一节,我们简单聊了Task是什么,它有什么状态,从而引申出优先级、状态迁移等;在汽车ECU中任务基本都是静态配置好的,那么就必须有一个调度策略,比如高优先级任务可以打断低优先级这样的策略。在AUTOSAR OS中,任务是以可抢占和不可抢占两种方式来进行调度的;


      可抢占(Preemptive):高优先级且ready的任务先运行;高优先级可以打断低优先级任务;任务运行时可以进行任务切换;

      不可抢占(Non-Preemptive):高优先级且ready的任务先运行,高优先级不可抢占低优先级任务;只有在任务运行完毕后才能进行任务切换
    此外,AUTOSAR OS还支持混合方式调度,即对每个task配置单独配置可抢占性,这个我暂时还没有用过。
            具体示例如下:

    AUTOSAR OS概述(一)w9.jpg

    04



    OS中的Task Stack处理

    当一个任务A抢占正在运行的任务B时,任务B正在处理的内容该如何处理呢?比如是局部变量等;这个时候就需要使用到Stack(栈)了。和中断类似,当高优先级任务抢占低优先级任务时,需要保存的内容有寄存器集、局部变量、返回地址;只是这个保存需要软件处理,而中断的大部分内容为了保证被抢占的任务上下文不被污染,AUTOSAR OS通常是对每个任务设置一个单独的stack区域(通常是消耗ram)
    AUTOSAR OS概述(一)w10.jpg

    代码如下:
    AUTOSAR OS概述(一)w11.jpg

    小结

            上文主要是对AUTOSAR OS 来源、task的概念做了一个概要的介绍;下一篇主要讲event、alarm、counter等。

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 1-2-2025 13:06 , Processed in 0.179999 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.