• 268查看
  • 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)}

快速发帖

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

本版积分规则

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

GMT+8, 27-12-2024 10:48 , Processed in 0.230858 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.