• 620查看
  • 0回复

[Autosar] Autosar OS多核同步过程详解

[复制链接]


该用户从未签到

发表于 8-5-2024 19:21:18 | 显示全部楼层 |阅读模式

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


在<<单片机启动分析(下)多核单片机的启动>>中我们介绍了多核单片机从上电到EcuM_Init的过程,在<<EcuM功能分析及实现(上)之STARTUP>>中我们介绍了EcuM_Init函数的具体实现,本文我们将介绍Autosar OS在启动过程和下电过程的同步和代码实现。
Autosar OS多核同步过程详解w1.jpg

多核OS启动过程中的同步
Autosar OS多核同步过程详解w2.jpg

多核OS下电过程中的同步
如上图所示,在整个OS的启动过程有两次同步,第一次同步是在EcuM初始化外设,调用StartOS后,此次同步的作用是保证在用户端看来(通过StartupHook)所有核的OS是同一时刻启动的,第二次同步是在执行完OS的StartupHook核ApplicationHook后,此次同步的作用是为了保证所有核的任务在同一时刻被拉起来,此后开始进行任务调度(Autosar OS的任务调度可见<<玩转Autosar OS任务调度机制>>)。同理,在OS下电过程中为了保证在用户端看来(ShutdownHook)所有核的OS是同一时刻下电的,也需要进行一次同步。下面以启动过程为例,编写启动过程的伪代码,如下所示。uint8 volatile OS_State[MAX_CORE_NUM];/*每个核的OS的状态*/voidEcuM_Init(void){  ...  EcuM_DriverInitZero();  ...  EcuM_DriverInitOne();  ...if (core_id == MASTER_CORE) {    EcuM_StartSlaveCores();  }  ...  EcuM_StartOS();  ...}
voidEcuM_StartSlaveCores(void){for (uint8 i = 0; i < MAX_CORE_NUM;i++) {    ...    OS_State = 1;/*core的状态为启动*/    ...  }}
voidEcuM_StartOS(void){  ...  Os_Synchronize_OS_Cores();  ...  StartupHook();  ...  Os_Synchronize_OS_Cores();  ...  Os_Dispatch();/*开始执行任务调度*/}
voidOs_Synchronize_OS_Cores(void){while(OS_State[0]!= 1 || OS_State[1]!= 1 ||... || OS_State[ECUM_CFG_NUM_OS_CORES-1] != 1)}


该用户从未签到

发表于 11-3-2025 17:28:00 | 显示全部楼层
好的,关于您提到的Autosar OS多核同步过程,我将以汽车工程师的专业角度进行解答。

在OS启动过程中,多核同步至关重要。首次同步发生在EcuM初始化外设并调用StartOS后。这次同步确保所有核的OS在用户端看来同时启动,保证了系统的协同工作。第二次同步在执行完OS的StartupHook和ApplicationHook后进行,确保系统各项任务同步启动,稳定运行。

至于下电过程的同步,主要是确保各核在关闭前能够完成当前任务,并同步进行资源释放和系统状态的保存。这涉及到中断管理、任务调度以及内存管理等方面,需确保系统安全关闭,防止数据丢失或损坏。

以上是对Autosar OS多核同步过程的简要介绍,详细的代码实现会涉及具体的系统架构和配置。希望对您有所帮助。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 1-7-2025 07:30 , Processed in 0.379619 second(s), 34 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.