AUTOSAR之ECUM

news2024/11/28 4:32:21

 1、EcuM简介      

        EcuM(ECU State Management)ECU状态管理模块属于AUTOSAR系统服务中模式管理部分,主要功能是管理ECU的上下电,初始化和反初始化OS,SchM,BswM以及其他一些驱动模块。

        AUTOSAR 4.4版本前EcuM有两种模式:Flexible模式Fiexd模式。在Fiexd模式下ECU的状态管理都由EcuM模块内部实现。在Flexible模式下,除了Startup的前期阶段、Shutdown的后期阶段以及Sleep阶段外,其它时候的状态管理都由BswM实现。AUTOSAR 4.4版本后移除了Fixed模式,本文只针对Flexible模式进行介绍。

        EcuM分成5个阶段:Startup,Up,Shutdown,Sleep,Off

        下图是EcuM的总体流程框图

       

        Startup阶段:主要负责BSW模块的初始化,该阶段以OS开启界细分为StartPreOS和StartPostOS。

        Up阶段:任务调度开启,此阶段的状态管理、动作执行主要靠BswM模块实现。

        Shutdown阶段:主要负责下电流程处理,下电完成后根据设置可以选择进入OFF还是RESET重启,该阶段以OS关闭为界细分为两部分OffPreOs和OffPostOs。

        Sleep阶段:ECU处于低功耗模式,通常情况下,不执行任何代码,但仍有电源供应,如果进行相应配置,ECU在此状态下是可唤醒的。ECU管理器模块提供了一组可配置的(硬件)睡眠模式,这些模式通常是在功耗和重启ECU的时间之间进行权衡的。

        Off阶段:下电时,ECU进入OFF状态。在这种状态下,ECU可能是可唤醒的,但仅限于具有集成电源控制的唤醒源。在任何情况下,ECU必须是可启动的(例如复位事件)。

2、启动Startup

        启动流程如下图所示,在调用EcuM_Init()函数之前,系统上电后,MCU进入复位状态,这时主要是进行芯片供电选择、时钟开启等操作。硬件完成这些工作后,将PC指针指向Boot Menu(AURIX 2G系列芯片是Firmware)中代码首地址,此时开始软件参数配置,包括用户配置参数的判断和加载、特定寄存器状态判断、复位源设置、启动模式评估等等。C Init Code主要对芯片的寄存器,上下文,栈等进行配置,以及启动主核(从核在这里被主核激活是个可选项,因为后续EcuM会再次激活从核)。

        可以调用EcuM_SelectBootTarget和EcuM_GetBootTarget 选择从Bootloader还是app启动跑后续程序。

        在EcuM_Init()函数里,首先进行开启OS前的准备工作,主要是调用EcuM_AL_DriverInitZero(初始化不带post-build配置参数的Bsw模块)和EcuM_AL_DriverInitOne函数,分别初始化Block 0和Block 1:

        如果是多核系统,那么在初始化Block1后,StartOS前要激活所有的从核。

        进入StartOS,会调用StartupHook函数,用户定义此函数内容,然后会激活首个Task(一般为Init Task),在首个Task里会调用EcuM_StartupTwo()。(正常来讲EcuM_StartupTwo()会被配置为OS默认应用模式自启动的任务里)。

        最后在StartPostOs阶段,调用SchM_Start,SchM_Init,SchM_StartTiming以及BswM_Init。

2.1 StartPreOs

         

  •  EcuM_AL_SetProgrammableInterrupts【可选】:可编程中断,如一些异常Trap;

  •  EcuM_AL_DriverInitZero【可选】:初始化不带post-build配置参数的BSW模块;

  • EcuM_DeterminePbConfiguration:返回所有BSW模块post-build配置参数的一个引用,通过此引用能获取各个模块的参数信息;

  • Check consistency of configuration data:对上一步结果的一致性检查;

  • EcuM_AL_DriverInitOne【可选】:初始化BSW模块,包括MCU及基本所有的外设模块,如Adc,Pwm,Fee,Can等;

  • Get reset reason:获取MCU复位源,并根据映射关系设置唤醒源。唤醒源通常是从功能角度定义的,比如CAN唤醒,KL15唤醒等,而复位源则和MCU相关,比如所有MCU都支持的Power on reset,这两者之间通过EcuM可以配置映射关系;

  • Select default shutdown target:设置Shutdown目标,可以是Sleep、Off或Reset;

  • EcuM_LoopDetection【可选】:如果使能,该接口每次Startup时都会被调用,例如可以用来记录启动次数;

  • Start OS:开启AUTOSAR OS

2.2 StartOs

  • EcuM_Prv_StartSlaveCores(多核):通过主核启动从核;
  • EcuM_SwitchOsAppMode:以默认应用模式启动OS;
  • EcuM_Prv_StartOS:开启OS,包括用户自定义的StartupHook函数,OS核同步,ActivateTask,ActivateTask是OS启动后自动调用,一般为Init Task和Idle Task。

2.3 StartPostOs

  • Init BSW Scheduler:初始化SchM;

  • Init BSW Mode Manager:初始化BswM;

  • Init NvM,NvM_ReadAll,Initialize other modules:BswM初始化后,接手后续操作,包括初始化NvM,NvM_ReadAll读取NvM数据,初始化其它的BSW模块等。NvM_ReadAll完成后将触发Com,DEM,FIM的初始化,并且通知BswM读取数据完成。

  • Start Scheduler Timing:启动BSW/SWCs事件调度。

        实际上,当SchM_Init及BswM_Init调用后,已经进入Up阶段了,此时内存,通讯还没初始化,SWC(RTE)还不支持。一般来说,需要在开启任务调度前做完NvM的数据读取及所有模块的初始化工作,以及需要手动调用BswM_Mainfunction。如果有其它方式可以保证在任务运行时模块及数据均已就绪的话,第三步也可以放在Up阶段进行。

3、运行Up

        在Up阶段,EcuM_MainFunction函数会被周期性的调用,此函数有以下三个作用:

  • 检查唤醒源是否已经唤醒,并在必要时启动唤醒验证
  • 更新Alarm时钟计数
  • 仲裁RUN和POST_RUN请求和释放。

        EcuM通过闹钟来触发唤醒。闹钟唤醒机制仅和Sleep阶段相关,SWC和BSW模块在Up阶段设置和检索闹钟设定值,在Sleep阶段被使用。EcuM里闹钟功能实现很少,不过多阐述。

        运行阶段主要是主要有两个功能需要关注:将处理权交给BswM,让其处理模式请求,控制状态切换;处理唤醒源的验证。

3.1 唤醒源验证

        唤醒源有以下4种状态:

  • NONE :无唤醒事件或唤醒事件被清除;

  • PENDING :检测到唤醒事件但尚未验证;

  • VALIDATED :检测到唤醒事件并验证通过;

  • EXPIRED :检测到唤醒事件但验证失败。

        唤醒源状态图如下所示:

        如果唤醒源不需要验证,通过EcuM_SetWakeupEvent可以直接设置为已验证状态,而对于需要验证的唤醒源,则要经过PENDING阶段确认是否有效,确认超时也会导致验证失败。

         EcuM模块可以管理多达32个唤醒源,除了标准的五个唤醒源(POWER、RESET、INTERNAL RESET、INTERNAL WDG和EXTERNAL WDG)不会触发验证过程,其它用户配置的唤醒源均可以开启验证功能。

4、关闭Shutdown

        在Up阶段,通过使用关闭目标RESET/OFF调用EcuM_GoDownHaltPoll来启动Shutdown阶段。如果在关闭阶段发生唤醒事件时,EcuM应立即完成关机并在此后立即重新启动。

4.1 OffPreOS

        在OffPreOS期间,如果配置参数EcuMlgnoreWakeupEvValOffPreos设置为true,只需考虑那些不需要验证的唤醒事件,所有其他的唤醒事件可以忽略。如果配置参数EcuMignoreWakeupEvValoffPreos设置为false时,不需要验证的唤醒事件和需要验证的待定唤醒事件都需被考虑到。

        作为OffPreos期间的最后一项活动, EcuM需调用Shutdownos函数。操作系统会在关机结束时,调用关闭钩子(hook)函数。关闭钩子函数会调用EcuM_Shutdown来结束关机过程。

4.2 OffPostOS

        当关关闭目标为RESET时, EcuM需调用EcuM_AL_Reset的Callout函数。当关机目标为OFF时, EcuM需调用EcuM AL Switchoff的Callout函数。

5、睡眠Sleep

        与Shutdown阶段相比,Sleep阶段不应关闭操作系统。 

5.1 GoSleep

       当在多核的ECU上运行时, EcuM需要为每个内核保留一个专用资源(RES_AUTOSAR_ECUM) 。该资源会在进入休眠(Go Sleep)期间分配。在睡眠模式下,EcuM不执行任何代码。

5.2 Halt或者Polling

        Sleep的实现机制有两种方式:Halt(停止)和Polling(轮询)。

        如果当ECU处于停止(Halt)或轮询(Poll)状态时,发生唤醒了事件唤醒硬线发生翻转变化,(toggling a wakeup line)CAN总线上有通讯信号(communication on a CAN bus)等则ECU管理器模块需重新获得控制权,并通过执行唤醒重启序列(WakeupRestart sequence)退出睡眠阶段。可以调用ISR来处理唤醒事件,但这取决于硬件和驱动程序的实现。

 6、多核

        如上图展示了BSW模块在不同分区上(partition)的分布。分区(partition)可以被看作是映射在一个内核(core)上的独立部分。每个核(无论是单核架构还是多核架构)都包含一个或多个分区。分区不能跨核。BSW模块可以分布在不同的分区上,所以可以分布在不同的内核上。如BswM这类的一些BSW模块需包含在每个分区中。如OS或EcuM这类的一些其他模块需包含在每个内核的一个分区中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说,Border并不是一个布局控件,因为它并不是Panel的子类,而是Decorator装饰器的子类,而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…

【区块链+医疗健康】医保监管飞检魔方可信链 | FISCO BCOS应用案例

《“十四五”全民医疗保障规划》提出加快健全基金监管体制机制,要求飞行检查全覆盖。近年来,国家医保局 飞行检查专项行动,累计发现问题 70 多万家次,累计追回医保基金 340 多亿元。而飞行检查面临检查时间短、 工作任务重、数据多…

Linux 使用kickstart创建脚本实现新建虚拟机自动安装

Linux版本:红帽7.9 确保网络配置可用,本地仓库可用,同时已经挂载/dev/cdrom,可用yum list查看 一、环境配置: 1、首先保证是有图形界面 利用hostnamectl 查看 如果没有安装图形界面可以使用yum group install "Server wi…

源码编译安装LAMP(HTTP服务,MYSQL ,PHP)

一、安装Apache 可在生产环境使 下载在 下面两个插件是httpd2.4以后的版本所需要 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz 虽然xf通常足够,但使用与压缩算法对应的选项可以提供更好的控制。 tar xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.…

How to run OpenAI Gym .render() over a server

题意:怎样在服务器上运行 OpenAI Gym 的 .render() 方法 问题背景: I am running a python 2.7 script on a p2.xlarge AWS server through Jupyter (Ubuntu 14.04). I would like to be able to render my simulations. 通过 Jupyter(在 U…

鸿蒙Navigator跳转不生效的问题

新增配置文件: 注意:该文件要在moudle中配置引用,非则跳转无法生效:

[Meachines] [Easy] Sunday Finger网络用户枚举+Wget文件覆盖权限提升

信息收集 IP AddressOpening Ports10.10.10.76TCP:79, 111, 515, 6787, 22022 $ nmap -p- 10.10.10.76 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 79/tcp open finger? | fingerprint-strings: | GenericLines: | No one logged on | GetReque…

黑马Java零基础视频教程精华部分_14_正则表达式

系列文章目录 文章目录 系列文章目录一、先爽一下正则表达式不使用正则的情况下使用正则的情况下 二、正则表达式的作用三、正则表达式具体表达1、规则2、字符类示例3、预定义字符示例首先学习转义字符 示例练习 四、基本练习1、快捷方法:2、验证手机号3、验证座机电…

JavaEE 第4节 线程安全问题

小贴士: 本节题目所述的主题其实非常的庞大,如果要细讲起来,一篇博客远远不够,本篇博客只会每个方面的内容做一个简要描述,详细的内容在后续同专栏博客中都会涉及到的,如果有需要可以一步到本专栏的其他博客…

Flows.network

Flows.network是什么 Flows.network 是一个 Severless 平台,用 Rust 和 Wasm 构建 LLM Agent 和机器人。flows.network 平台允许开发者将像 ChatGPT 和 Claude 的大模型连接到不同的 SaaS 提供商。由于模型已经具备与 OpenAI 兼容的 API,我们可以像在 O…

Photoneo PhoXi 3D Scanner XS

静态场景快照式3D扫描仪 PhoXi 系列是Photoneo公司专为静态场景高分辨率和高精度扫描工业场景应用设计生产的3D扫描仪,PhoXi 3D Scanner XS 型号专为精确地输出而设计,主要应用于印刷电路板、小部件的检测等。 产品特点 红色激光扫描,所见即…

商家转账到零钱现金营销场景申请一次通过攻略

商家转账到零钱现金营销场景是微信支付商家申请最多的场景之一,微信支付平台对申请材料的要求较多从而导致商家很容易被驳回,根据我们上万次成功申请的经验,申请该功能时商家要确保一次过审,需要遵循以下详细步骤和注意事项&#…

AR眼镜:重型机械维修保养新利器

重型机械作为工业与建设领域的重要支柱,其稳定运行直接影响效率与成本。然而在偏远地区,面临复杂故障和高昂维修成本,传统维修方式常显得力不从心。如今,安宝特的AR远程协助解决方案结合Vuzix AR眼镜,正悄然改变这一现…

人工智能系统测试中,A/B测试的流程、技术方法与策略

模型的迭代和优化是推动人工智能技术进步的核心动力。如何准确地评估模型更新前后的性能提升,是人工智能测试中的一个难点。A/B测试,作为一项科学且客观的测试方法,在此过程中发挥着至关重要的作用。本文我们继续为大家介绍人工智能系统测试方…

数据中台之数据开发,数据开发概述与数据计算能力的类型

目录 一、数据开发概述 二、数据计算能力的类型 2.1 概述 2.2 批计算 2.2.1 概述 2.2.2 批计算模型 2.2.2.1 传统数据处理方案的问题 2.2.2.2 MapReduce模型 2.2.2.3 Spark框架 2.3 流计算 2.4 批流一体 2.5 在线查询 2.6 即席分析 一、数据开发概述 数据开发是数…

做空日经指数的策略与时机

一、市场背景分析 在全球股市的剧烈波动中,日本股市的表现尤为引人关注。日经225指数在经历一轮暴跌后,又出现了大幅反弹,这种剧烈的波动为投资者提供了做空日经指数的机会。近期,日本股市受到日元汇率波动、日本央行货币政策以及…

文章复现 创新点 代码改进跑通 深度学习

文章复现 创新点 代码改进跑通 深度学习 SCI代码复现 文章复现 数据处理、数据分析、算法、数据结构data structure、机器学习machine learning、深度学习deep learning。创新改进,算法提升 python环境配置 ,深度学习代码调试 、代码复现,py…

WebStorm格式化JSON,将一行很长的JSON展开

webstorm json格式化插件将一行很长的json展开 在WebStorm中,要展开很长的JSON行,可以使用内置的JSON格式化功能。 打开WebStorm,并打开包含JSON的文件。 选择JSON文件中的任意部分。 按下快捷键 CtrlAltL (Windows/Linux) 或 CmdAltL (Ma…

用4点结构标定3点结构的顺序

在行列可自由变换的条件下,平面上的4点结构只有16个 (A,B)---6*30*2---(0,1)(1,0) 让A分别是4a1,2,…,16,让B全是0。当收敛误差为7e-4,收敛199次取迭代次数平均值,得到 迭代次数 搜索难度 1 …

免费开源的高科技行业ERP解决方案

引言 协助高科技企业信息化转型升级,通过开源智造Odoo标准模块与拓展模块,实现精细化、数字化与智能化的管控,将线性供应链转变为智能供应网络,形成整合与集成化的管理系统,提高对市场的响应速度。 业务挑战 项目管控难…