3.AUTOSAR OS分析(一)

1. AUTOSAR OS诞生背景

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

  • 固定优先级调度
  • 中断处理
  • 函数StartOS和StartupHook作为启动阶段的通用接口
  • 函数ShutdownOS和ShutdownHook作为下电阶段的通用接口

        基于事件触发方式为用户在使用时提供了极大的便利,例如当检测到某种错误时产生一个事件,进一步地触发一个runnable。

        AUTOSAR OS就是在OSEK OS的基础上演变而来,同时也引入了一些新的特性。

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

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

OSEK OS

OSEK OS等级定义如下:

  1. BCC1:仅仅支持basic task,每个任务只能有一个激活请求,每个优先级只能有一个任务,而所有任务都有不同的优先级
  2. BCC2:与BCC1相似,与BCC1一样,每个优先级可能有多个任务,并且允许多个请求激活任务
  3. ECC1:与BCC1相似,支持extended tasks
  4. ECC2:与ECC1一样,每个优先级可能有多个任务,Basic Task允许多个请求任务激活

        AUTOSAR OS 扩展等级如下: 

AUTOSAR OS Scalability Classes

        最高等级的SC4,相当于是支持OSEK OS全部特定、调度表、时间同步\保护、内存保护、Trust分区、OS-Application等特性,其强大程度可见一斑。

        AUTOSAR OS在AUTOSAR架构里处于系统服务这一层级,为ECU的运行提供基础服务。

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

  1. AUTOSAR OS中的TASK
  2. AUTOSAR OS中的调度策略
  3. AUTOSAR OS中的TASK Stack处理
  4. AUTOSAR OS中的alarm和counter关系
  5. AUTOSAR OS中的event
  6. AUTOSAR OS中的ISR种类


 2.AUTOSAR OS中的TASK

        在聊Task之前,首先想描述下计算机操作系统中关于进程(Process)、线程(Thread)的概念。

        进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是系统进行资源分配和调度的基本单位。进程是一个动态的概念,是一个活动的实体。

        普通的计算机可以同步做几件事情,比如“上网”,“看电影”,“打游戏”,就是说可以运行很多进程。但是嵌入式计算机通常设计成只做一件事情,比如在汽车领域,整车控制器VCU,发动机喷油点火控制器ECU,变速箱换挡控制器TCU,车身控制器BCM等。这样类比,传统的一个电子控制单元ECU相当于只运行一个进程。现目前的MCU例如TC4xx、Stella提供虚拟化的技术可以实现多个进程的ECU,这种思路就是各个ECU功能通过硬件虚拟化的技术合理布置在一个ECU中,而这些功能都认为它是在独享这台ECU资源的。

        线程是OS能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

        在计算机操作系统里,只强调进程和线程的概念。而在嵌入式操作系统里,任务就是线程的意思。怎么会这样呢?这是因为一个嵌入式系统设计为只实现一个具体功能的是专用计算机系统,在通用计算机系统只相当于一个进程。而且,通用计算机的一个进程可衍生出几个独立进程,好比你可以打开两个Word文档交互编辑。但是,一个汽车ECU不会用软件复制的方法去同时控制两台发动机。

        因此我们在某些代码中会看到thread,大家也不要疑惑,一般情况,就是task如下:

 2.1 Task的具体定义

        先上一个我个人认为很形象的图片

​         所谓任务,就是能够被执行的最基本C函数;同时这些任务对CPU的访问权限是有竞争的,这就引出了任务的优先级概念;任务在执行完毕后释放CPU以供其他任务使用;这种理解角度可能比较新奇,但很有效果;把多个任务想象成多个人物实体,人要使用CPU来处理某种工作,就必须要竞争和释放,这种竞争是有规则的,这就又引出了调度的概念。

        OS Task的优先级还是源自OSEK OS,根据规范ISO 17356-3定义,数字越小优先级越低,比如0就是最低优先级;优先级取值范围为0..4294967295,但实际上用不到这么多,255够够的了。

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

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

  1. 运行态(Running):处于运行态时,cpu被当前task占用,该task指令被执行;任何时间都只能有一个task处于该状态;
  2. 准备态(Ready):满足转换到运行态的所有前置条件,任务只等待处理器的分配。调度器决定下一步执行哪个ready任务
  3. 等待态(Waiting):处于该状态的任务在等待一个event,该任务不会执行;
  4. 挂起态(Suspended):处于该状态的任务可以被激活。 

        常见的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();

}

 3.AUTOSAR OS中的调度策略

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

        在AUTOSAR OS中,任务是以可抢占和不可抢占两种方式来进行调度的;

  • 可抢占(Preemptive):高优先级且ready的任务先运行;高优先级可以打断低优先级任务;任务运行时可以进行任务切换;
  • 不可抢占(Non-Preemptive):高优先级且ready的任务先运行,高优先级不可抢占低优先级任务;只有在任务运行完毕后才能进行任务切换

        此外,AUTOSAR OS还支持混合方式调度,即对每个task配置单独配置可抢占性,这个我暂时还没有用过。

        具体示例如下:

4. AUTOSAR OS中的TASK Stack处理

        当一个任务A抢占正在运行的任务B时,任务B正在处理的内容该如何处理呢?比如是局部变量等;这个时候就需要使用到Stack(栈)了。

        和中断类似,当高优先级任务抢占低优先级任务时,需要保存的内容有寄存器集、局部变量、返回地址;只是这个保存需要软件处理,而中断的大部分内容都有硬件自动完成。

        为了保证被抢占的任务上下文不被污染,AUTOSAR OS通常是对每个任务设置一个单独的stack区域(通常是消耗ram)

        代码如下: 


 小结

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值