APP开发公司Position

你的位置:长沙开发软件平台 > APP开发公司 > 车载软件架构 —— 闲聊几句AUTOSAR OS(十一)

车载软件架构 —— 闲聊几句AUTOSAR OS(十一)

发布日期:2024-12-21 16:23    点击次数:126

车载软件架构 —— 闲聊几句AUTOSAR OS(十一)我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:“

没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最后,既没有活成别人喜欢的样子,也没有活成自己想要的样子。我们只有接纳真实的自己,不自卑、不自傲,才能拥有更强大的内心;只有找到自己的核心价值,才能活出自己的精彩人生。

图片

本文主要讲述如下内容,接着上一篇的介绍内容,继续聊AUTOSAR OS相关内容:-> 1、AUTOSAR OS的启动-> 2、AUTOSAR OS的关闭前面的系列文章中介绍了AUTOSAR OS的发展历程,以及其中非常重要的元素,概念,和相关的实现机制;并重点介绍一下配置工具里的OS模块需要注意的内容和配置项。而在当下主流的车载MCU中,特别是在网关,区域控制器,三电控制器等领域中大多使用的是性能较强的多核MCU芯片;因此,将会基于多核MCU的架构下,来讲述AUTOSAR OS多核的启动和关闭流程。一、AUTOSAR OS的启动在AUTOSAR OS中,多核OS系统会分为主从结构,主核是在上电开始时自动启动的;其他的从核是由主核,或者其他的从核来进行启动的。最开始上电开始时,主核会执行Reset所对应中断服务程序,即主核的启动代码。在启动代码中完成MCU的一些底层关键的配置,如PLL配置,FPU配置等,也会去初始化内存,和相关的内核寄存器(有时候也会初始化部分外设寄存器),初始化中断向量表地址,Trap向量表的地址等等。启动代码执行完毕以后,就会进入到main函数中,然后执行相应的下一阶段的初始化动作,如Os_InitMemory(),Os_Init (),EcuM_Init()等函数。此处需要额外说明的是,每个内核都需要执行启动代码程序,启动代码可以是自己独有的,或者是一份启动代码,每个内核执行不同的代码片段(通过不同的Core ID来区分)。OS在启动的时候,是和EcuM的上电启动流程,和配置息息相关的,当Master Core在main函数中执行到EcuM_Init()函数,会去依次执行一些基础的初始化列表,如各个BSW模块的Memory初始化(InitZero),以及一些BSW模块之下的底层模块,如Mcu, Port,ADC,Gpt等模块的初始化任务(InitOne)。这些模块是启动其他Core,以及启动OS所必需的模块。当这些初始化完成以后,会调用EcuM_StartOS()函数,在这个函数里,会根据所配置的内核数量,调用StartCore()依次启动其他几个Slave Core。其他几个Core启动以后,会依次按照顺序执行启动代码,APP开发资讯main函数,EcuM_Init()函数等等来完成相应的动作。StartCore()函数调用完毕以后,各个核之间会进行第一次同步,同步完成了以后再执行下一步操作。

图片

当每个Core都启动且同步完成,每个Core都会调用StartOS(),来开启OS;这个时候需要提前在配置工具中为每个Core配置一个自动调度执行的初始化Task,此Task需要配置为自动启动,高优先级,以及不可被抢占。当OS启动之后,每个Core会分别去调用所配置的初始化Task,在Task中会去执行EcuM_StatupTwo(),在这个函数中去执行OS开启调度之前的准备工作,如SchM_Start(), SchM_Init(), BswM_Init(), 以及所用到的BSW模块的初始化。当初始化完成以后,每个Core都会去执行Rte_Start(),主核会去判断其他所有从核是否都执行了Rte_Start(),如果执行了,主核自身会去Rte_Start(),正式开启OS Task调度。从核这边自己先执行Rte_Start(),然后再等待主核执行完了Rte_Start()以后,也正式开启OS Task调度,如下图所示示意图。此处调用的Rte_Start(),也是多核OS启动过程中的第二次同步。

图片

如下图所示,可以将AUTOSAR OS中多核启动的流程进行总结。在整个启动过程中,不同的核间会进行两次同步,第一次是在执行StartCore()会进行一次同步;第二次是在执行Rte_Start()时进行同步的。两次同步完毕以后,每个Core会正式开启调度,开始执行用户所配置的Task,或者ISR中断服务程序。至此,OS的上电启动已经完成了。需要额外补充说明的是,OS的启动流程是EcuM上电流程的一部分,后续在模式管理文章中会对EcuM的上电流程继续进行介绍。

图片

二、AUTOSAR OS的关闭一般情况下,当ECU需要关闭,或者重启的时候,EcuM会进入到ShutDown阶段,会一次关闭BswM模块,关闭BSW的调度表,检查唤醒事件等等。和EcuM上电的流程基本相反(在后续的AUTOSAR模式管理的系列文章中,会详细说明的)。然后才开始关闭OS。和OS启动流程稍有不同,OS的关闭流程相对来说没那么多的步骤了。

图片

一般情况下,在OS关闭的情况下,每个Core都会去执行EcuM_GoDown(),然后去执行ShutdownOS()来完成OS 的关闭。当OS在关闭的过程中,每个OS Application会去调用各自的Shutdown Hook来完成对应的回调程序。随后,就等待到同步点,进行各个核间的关闭时候的同步。同步完成以后,执行最后的Shutdown Hook。当然,针对上述的关闭流程,需要在EcuM中做相应的配置,如,需要配置Bsw Core的ID,一般配置为主核ID。同时,也要使能去处理从核的OS关闭流程的内容。如下面截图所示的配置。

图片

搁笔分享完毕!愿你我相信时间的力量做一个长期主义者!

图片

车载软件架构 —— 闲聊几句AUTOSAR OS(九)

车载软件架构 —— 闲聊几句AUTOSAR OS(八)

车载软件架构 —— 闲聊几句AUTOSAR OS(七)

电子电气架构——车载DoIP通信汇总

车载软件架构 —— 闲聊几句AUTOSAR OS(六)

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

电子电气架构 —— OEM关于DTC具体实现相关见解

车载软件架构 —— 闲聊几句AUTOSAR OS(五)

车载软件架构 —— 闲聊几句AUTOSAR OS(四)

车载诊断协议 —— 诊断服务Service 11

车载软件架构 ——闲聊几句AUTOSAR OS(三)

车载软件架构 —— 闲聊几句AUTOSAR OS(二)

车载诊断协议-ISO 14229

车载诊断协议-ISO 14229 / 13400 /15765

车载软件架构——闲聊几句AUTOSAR OS(一)

电子电气架构——IP地址获取方式

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

Powered by 长沙开发软件平台 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024 云迈科技 版权所有

TOP