<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Tricore芯片的AUTOSAR架構下的多核啟動

832065824 ? 來源:汽車電子嵌入式 ? 2023-10-23 10:15 ? 次閱讀

前言

隨著汽車ECU迅速的往域控制器方向發展,ECU要出來任務越來越多,單核CPU的負載越來越大,多核ECU勢在必行。AUTOSAR架構下OS支持多核處理,本系列文章將詳細介紹AUTOSAR架構下的多核機制。本文介紹基于Tricore芯片的AUTOSAR架構下的多核啟動。

d02e2b7c-7148-11ee-939d-92fbcf53809c.png

縮略詞

簡寫 全稱
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多核啟動

背景知識1:UCB_BMHD0_ORIN.STAT的啟動地址是配置Tricore啟動后SSW從用戶程序的哪個地址開始運行,LD鏈接文件里面的入口地址EntryPoint是配置鏈接器把上電就執行的用戶入口代碼地址鏈接到Entry Point,二者應該是同一個地址,也就是說:UCB_BMHD0_ORIN.STAT的啟動地址 要等于LD鏈接文件中的Entry Point啟動地址。

參考文檔:

TC3xx芯片的UCB詳解

Note: 想arm-cotexM4芯片(e.g. S32K144),沒有SSW這個固化程序,一上電默認就從0地址啟動,所以我們的LD文件需要把我們的Reset_Handler放到0地址處。

參考文檔:

S32K平臺學習(1)-S32K144啟動流程分析

問題1:Tricore是多核ECU,為什么上電后只有Core0在Runing狀態? Core1/2/…是在halt狀態?

如下三個圖所示,Tricore上電后,CPU0默認進入RUN狀態,CPU1和CPU2默認進入halted狀態。

d042080e-7148-11ee-939d-92fbcf53809c.png

d049cb8e-7148-11ee-939d-92fbcf53809c.png

d056db12-7148-11ee-939d-92fbcf53809c.png

如下圖所示,Tricore芯片的CPU0(Core0)在上電(Reset)后默認是進入RUN狀態的,其他CPUx默認是進入HALT狀態的,這是芯片特性。

我們可以通過配置SYSCON寄存器的BHALT位=0b使得CPUx進入RUN狀態。

d06c67f2-7148-11ee-939d-92fbcf53809c.png

d07d71fa-7148-11ee-939d-92fbcf53809c.png

:這是CPU芯片特性定義的。

背景知識2:我們可以在Core0啟動后,通過配置SYSCON寄存器的BHALT位域來啟動其他Slave核,在其實Slave核的同時應該配置Slave Core的PC指針到我們想要Slave Core啟動的地址處。

d09751ec-7148-11ee-939d-92fbcf53809c.png

2.OS多核啟動時序

AUTOSAR架構下, 多核系統分主核(Mater Core,通常也是BSWCore,Tricore芯片下的CPU0)和從核(Slave Core)。系統啟動后MasterCore自動啟動,Slave Core由Master Core啟動OS后再通知啟動。

圖一為Core0的啟動時序,ECU上電后(或者Reset)只有Master Core會Run起來,Master Core的啟動代碼Startup()會跳轉到main()函數,main函數調用EcuM_Init()開始Master Core 0的StartSequence:

StartCore: 調用Os_Hal_CoreStart啟動所有Slave Core.

Os_Hal_CoreStart: 配置芯片寄存器真正啟動Slave Core(后文詳細分析).

StartOS: 啟動OS.

Os_BarrierSynchronize: 開始進行核同步,也就是等待Slave Core運行到這個地方,沒有完成核同步錢,Master Core會阻塞在這個地方(后文詳細分析OSBarriers機制)。

Rte_Start: 完成核同步后,OS調度進入Core0的Init Task,InitTask中調用Rte_Start。

Note:Core0 的Init Task一般不會mapping任何的SWC的Runnable,這樣Init Task就需要手動實現(不會由RTE自動生成),在Init Task中就能手寫我們想要運行的代碼,比如:e.g. 調用Rte_Start().

完成以上的任務后,Core0完成了StartSequence,開始Cyclic Task的調度。

d09fad24-7148-11ee-939d-92fbcf53809c.png

Figure 1: OS Core0 start sequence.

Master Core調用Os_Hal_CoreStart()后,Slave Core就會立刻啟動,啟動Sequence和Core0基本一樣,只不過沒有啟動Slave的步驟。值得注意的是,Slave Core先調用Rte_Start(),而后再調用Os_BarrierSynchronize().

d0aae3c4-7148-11ee-939d-92fbcf53809c.png

Figure 2: OS Core1 start sequence.

3. 多核啟動關鍵步驟分析

3.1 StartCore分析

StartCore()最后會調用Os_Hal_CoreStart()啟動Slave Core, 代碼如下所示,最主要的就是

1.配置PC指針指向Slave Core的啟動地址,這個啟動地址可以在Davinci工具中配置(_start_core1)。

d0bfdf68-7148-11ee-939d-92fbcf53809c.png

d0def772-7148-11ee-939d-92fbcf53809c.png

2. 配置SYCON寄存器控制Slave Core從Halt狀態切換到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才會跳出阻塞狀態,這樣就能實現核同步。

d0e3b398-7148-11ee-939d-92fbcf53809c.png

參考文檔:MICROSAR Classic OS Technical Reference.

問題2:為什么要讓Slave Core的Rte_Start先調用了?

:Vector的推薦代碼這么寫的。

d0f9c1d8-7148-11ee-939d-92fbcf53809c.png

參考文檔:How to deal with MICROSAR Multi-Core Projects.

4. 總結

a. Tricore芯片Reset后只有Master Core0會進入到Run狀態,Slave Cores處于Halt狀態。

b. AUTSARMaster Core的OS調用StartCore()啟動Slave Core.

c. StartCore()最終調用Os_Hal_CoreStart()配置Tricore芯片的PC指針和SYSCON寄存器啟動Slave Core.

d. OS通過OsBarriers機制實現核同步。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    447

    文章

    47995

    瀏覽量

    410374
  • AUTOSAR
    +關注

    關注

    9

    文章

    333

    瀏覽量

    21180
  • ecu
    ecu
    +關注

    關注

    14

    文章

    827

    瀏覽量

    53957
  • TriCore
    +關注

    關注

    0

    文章

    13

    瀏覽量

    11701
  • 域控制器
    +關注

    關注

    0

    文章

    233

    瀏覽量

    2465

原文標題:AUTOSAR架構下多核啟動

文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于Tricore芯片AUTOSAR架構下的多核Shutdown介紹

    當ECU滿足休眠條件時,根據ECU的硬件設計會走Sleep或者Shutdown的過程。
    的頭像 發表于 11-06 09:09 ?1261次閱讀
    基于<b class='flag-5'>Tricore</b><b class='flag-5'>芯片</b>的<b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b>下的<b class='flag-5'>多核</b>Shutdown介紹

    AUTOSAR架構下的多核通信介紹

    隨著汽車ECU迅速的往域控制器方向發展,ECU要處理的任務越來越多,單核CPU的負載越來越大,多核ECU勢在必行。AUTOSAR架構下OS支持多核處理,本系列文章將詳細介紹
    的頭像 發表于 11-13 09:24 ?843次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b>下的<b class='flag-5'>多核</b>通信介紹

    AUTOSAR分層架構

    AUTOSAR分層架構
    發表于 09-26 11:12

    功能安全---AUTOSAR架構深度解析 精選資料分享

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析AUTOSAR的分層式設計,用于支持完整的軟件和硬件模塊的獨立性(Indep
    發表于 07-23 08:34

    AUTOSAR架構深度解析 精選資料推薦

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析目錄AUTOSAR架構深度解析
    發表于 07-28 07:40

    AUTOSAR架構深度解析 精選資料分享

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析AUTOSAR的分層式設計,用于支持完整的軟件和硬件模塊的獨立性(Indep
    發表于 07-28 07:02

    關于AUTOSAR架構的知識點看完你就懂了

    關于AUTOSAR架構的知識點看完你就懂了
    發表于 10-18 07:41

    AUTOSAR軟件架構是由哪些部分組成的

    章節回顧AUTOSAR軟件架構(一)中描述了以下內容:Application Layer應用層Runtime Environment (RTE)運行時環境Basic Software (BSW
    發表于 12-09 07:30

    如何在Tricore上移植μC/OS-III

    本文是《在Tricore上移植μC/OS-III》系列文章的第一篇,先簡單介紹整個項目。Tricore是英飛凌旗下的一款單片機內核,目前汽車電子領域常用的TC2XX和TC3XX等系列的單片機都是
    發表于 01-27 08:17

    介紹在ARM64架構啟動多核的兩種方式

    1、ARM64的多核啟動流程分析工作中遇到的多核 ARM CPU 越來越多,總結分享一些多核啟動的知識,希望能幫助更多小伙伴。在 ARM64
    發表于 06-13 18:23

    AUTOSAR分層架構介紹及SmartSAR studio使用總結

    AUTOSAR分層架構
    發表于 03-28 16:44 ?9次下載

    多核CPU的啟動方式

    工作中遇到的多核 ARM CPU 越來越多,總結分享一些多核啟動的知識,希望能幫助更多小伙伴。 在 ARM64 架構下如果想要啟動
    的頭像 發表于 06-22 10:04 ?1197次閱讀

    AUTOSAR是什么?AUTOSAR軟件架構簡介

    AUTOSAR的全稱是AUTomotive Open System Architecture,直譯為汽車開放系統架構
    的頭像 發表于 07-08 17:26 ?1w次閱讀
    <b class='flag-5'>AUTOSAR</b>是什么?<b class='flag-5'>AUTOSAR</b>軟件<b class='flag-5'>架構</b>簡介

    AutoSAR構架以及在多核汽車MCU的運行

    小二之前只開發過異構雙核的芯片,各跑各的軟件(比如各自運行一套FreeRTOS,反正組件裁剪下也不大),針對類似Stellar,AURIX這樣的同構多核的軟件不了解; 比如針對AutoSAR
    的頭像 發表于 07-24 10:57 ?1709次閱讀
    <b class='flag-5'>AutoSAR</b>構架以及在<b class='flag-5'>多核</b>汽車MCU的運行

    基于Tricore架構的RTThread多核實現

    在《基于Hightec+TC375TP的RT-Thread移植詳解 》一文中,基于Tricore實現了單核RTThread的移植。最近,花了些時間完成遺留的任務:基于Tricore多核移植。目前
    的頭像 發表于 09-12 18:40 ?548次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>