AUTOSAR架构下多核启动

admin 2023年10月23日10:17:03评论10 views字数 3864阅读12分52秒阅读模式

前言

随着汽车ECU迅速的往域控制器方向发展,ECU要出来任务越来越多,单核CPU的负载越来越大,多核ECU势在必行。AUTOSAR架构下OS支持多核处理,本系列文章将详细介绍AUTOSAR架构下的多核机制。本文介绍基于Tricore芯片的AUTOSAR架构下的多核启动

AUTOSAR架构下多核启动

缩略词

简写

全称

UCB

User Configuration Block

SSW

Startup Software

BMHD

Boot Mode Headers

SYSCON

System Configuration Register


参考文档

1. TriCoreTM TC1.6.2 core architecture manual

2. AURIXTC3XX_um_part1_v2.0.pdf


注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1. Tricore多核启动

背景知识1UCB_BMHD0_ORIN.STAT的启动地址是配置Tricore启动后SSW从用户程序的哪个地址开始运行,LD链接文件里面的入口地址Entry Point是配置链接器把上电就执行的用户入口代码地址链接到Entry Point,二者应该是同一个地址,也就是说:UCB_BMHD0_ORIN.STAT的启动地址 要等于LD链接文件中的Entry Point启动地址

 

参考文档:

TC3xx芯片的UCB详解


Note: arm-cotex M4芯片(e.g. S32K144),没有SSW这个固化程序,一上电默认就从0地址启动,所以我们的LD文件需要把我们的Reset_Handler放到0地址处。


参考文档:

S32K平台学习(1)-S32K144启动流程分析



问题1Tricore是多核ECU,为什么上电后只有Core 0Runing状态? Core1/2/…是在halt状态?

如下三个图所示,Tricore上电后,CPU0默认进入RUN状态,CPU1CPU2默认进入halted状态。

 

AUTOSAR架构下多核启动


AUTOSAR架构下多核启动

 

 

AUTOSAR架构下多核启动


如下图所示,Tricore芯片的CPU0(Core0)在上电(Reset)后默认是进入RUN状态的,其他CPUx默认是进入HALT状态的,这是芯片特性。

我们可以通过配置SYSCON寄存器的BHALT=0b使得CPUx进入RUN状态。

 

AUTOSAR架构下多核启动


AUTOSAR架构下多核启动

 

:这是CPU芯片特性定义的。


背景知识2:我们可以在Core0启动后,通过配置SYSCON寄存器的BHALT位域来启动其他Slave核,在其实Slave核的同时应该配置Slave CorePC指针到我们想要Slave Core启动的地址处。

 

AUTOSAR架构下多核启动

 

2. OS多核启动时序

AUTOSAR架构下, 多核系统分主核(Mater Core,通常也是BSW CoreTricore芯片下的CPU0)和从核(Slave Core)。系统启动后Master Core自动启动,Slave CoreMaster Core启动OS后再通知启动。


图一为Core0的启动时序,ECU上电后(或者Reset)只有Master CoreRun起来,Master  Core的启动代码Startup()会跳转到main()函数,main函数调用EcuM_Init()开始Master Core 0Start Sequence:


StartCore:  调用Os_Hal_CoreStart启动所有Slave Core.


Os_Hal_CoreStart:  配置芯片寄存器真正启动Slave Core(后文详细分析).

StartOS: 启动OS.


Os_BarrierSynchronize: 开始进行核同步,也就是等待Slave Core运行到这个地方,没有完成核同步钱,Master Core会阻塞在这个地方(后文详细分析OS Barriers机制)。


Rte_Start: 完成核同步后,OS调度进入Core0Init TaskInit Task中调用Rte_Start


NoteCore0 Init Task一般不会mapping任何的SWCRunnable,这样Init Task就需要手动实现(不会由RTE自动生成),在Init Task中就能手写我们想要运行的代码,比如:e.g. 调用Rte_Start().

完成以上的任务后,Core0完成了Start Sequence,开始Cyclic Task的调度。

 

AUTOSAR架构下多核启动

Figure 1: OS Core0 start sequence.


Master Core调用Os_Hal_CoreStart()后,Slave Core就会立刻启动,启动SequenceCore0基本一样,只不过没有启动Slave的步骤。值得注意的是,Slave Core先调用Rte_Start(),而后再调用Os_BarrierSynchronize().

 

AUTOSAR架构下多核启动

Figure 2: OS Core1 start sequence.


3. 多核启动关键步骤分析

3.1 StartCore分析

StartCore()最后会调用Os_Hal_CoreStart()启动Slave Core, 代码如下所示,最主要的就是

1. 配置PC指针指向Slave Core的启动地址,这个启动地址可以在Davinci工具中配置(_start_core1)。

 

AUTOSAR架构下多核启动


AUTOSAR架构下多核启动

 

2. 配置SYCON寄存器控制Slave CoreHalt状态切换到Run状态(SYSCON.BHALT位域写入0)。

OS_FUNC_ATTRIBUTE_DEFINITION(OS_LOCAL_INLINE void, OS_CODE, OS_ALWAYS_INLINE,Os_Hal_CoreStart,(P2CONST(Os_Hal_CoreConfigType, AUTOMATIC, OS_CONST) Core)){  /* #10 Write the foreign PC with the startup code symbol for core 1. */  *((volatile uint32*)Core->ProgramCounterRegister) = (uint32)(Core->StartLabelAddress);                                  /* #20 Reset the core. */  *((volatile uint32*)Core->DBGSRRegister) = OS_HAL_DBGSR_START_CORE;                                                     /* #30 Release the core. */  *((volatile uint32*)Core->SYSCON_CORECON_Register) &= ~OS_HAL_SYSCON_BHALT_MASK;                                               }

3.2 Os_BarrierSynchronize分析

Os_BarrierSynchronize()就是OsBarriers的具体实现,如果一个Barrier被多个Task引用了,那么只有引用这个Barrier的所有Task都调用了Os_BarrierSynchronize(Same BarrierID)Task才会跳出阻塞状态,这样就能实现核同步。

 

AUTOSAR架构下多核启动


参考文档:MICROSAR Classic OS Technical Reference.


问题2:为什么要让Slave CoreRte_Start先调用了?

Vector的推荐代码这么写的。

 

AUTOSAR架构下多核启动

参考文档:How to deal with MICROSAR Multi-Core Projects.


4. 总结

a. Tricore芯片Reset后只有Master Core0会进入到Run状态,Slave Cores处于Halt状态。


b. AUTSAR Master Core OS调用StartCore()启动Slave Core.


c. StartCore()最终调用Os_Hal_CoreStart()配置Tricore芯片的PC指针和SYSCON寄存器启动Slave Core.


d. OS通过OsBarriers机制实现核同步。



End

「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」


点击文章最后左下角的阅读原文可以获取更多信息


或者复制如下链接到浏览器获取更多信息

https://blog.csdn.net/qq_36056498/article/details/132125693



注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!


推荐阅读

汽车电子嵌入式精彩文章汇总第一期:20210530-20230703

AUTOSAR 架构下EcuM唤醒源事件详解

AUTOSAR架构下NVM Block连续写及Default Value问题分析

AUTOSAR架构下NvM模块详细分析

AUTOSAR架构下报文掉线超时不上报问题分析

Classic Autosar下的以太网通讯架构概览

通信中间件Someip服务化通信

AUTOSAR架构下Fee详细分析

TC37x芯片FLASH基本概念介绍

AUTOSAR架构下Fls详细分析

TC3xx芯片DMU介绍

TC3xx芯片MPU介绍

TC3xx芯片的Trap详解

AUTOSAR架构下的OS错误处理

AUTOSAR架构下QM Application如何访问ASIL Application

End



欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!

汽车电子嵌入式

微信扫描二维码,关注我的公众号


原文始发于微信公众号(汽车电子嵌入式):AUTOSAR架构下多核启动

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月23日10:17:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AUTOSAR架构下多核启动http://cn-sec.com/archives/2137023.html

发表评论

匿名网友 填写信息