在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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機制實現核同步。

審核編輯:湯梓紅

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

    關注

    456

    文章

    51176

    瀏覽量

    427263
  • AUTOSAR
    +關注

    關注

    10

    文章

    363

    瀏覽量

    21779
  • ecu
    ecu
    +關注

    關注

    14

    文章

    892

    瀏覽量

    54746
  • TriCore
    +關注

    關注

    0

    文章

    15

    瀏覽量

    11768
  • 域控制器
    +關注

    關注

    0

    文章

    249

    瀏覽量

    2700

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

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

收藏 人收藏

    評論

    相關推薦

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

    當ECU滿足休眠條件時,根據ECU的硬件設計會走Sleep或者Shutdown的過程。
    的頭像 發表于 11-06 09:09 ?3076次閱讀
    基于<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>的<b class='flag-5'>多核</b>Shutdown介紹

    AUTOSAR架構多核通信介紹

    隨著汽車ECU迅速的往域控制器方向發展,ECU要處理的任務越來越多,單核CPU的負載越來越大,多核ECU勢在必行。AUTOSAR架構OS支持多核
    的頭像 發表于 11-13 09:24 ?2645次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</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

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

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

    AUTOSAR架構的WdgDriver WdgIf WdgM模塊

    本文主要介紹AUTOSAR 架構的WdgDriver WdgIf WdgM 模塊,分析模塊之間的依賴關系以及運行原理以幫助快速理解。本文以MPC5746R為主控芯片,以FS6500為
    的頭像 發表于 09-09 11:17 ?6572次閱讀

    多核CPU的啟動方式

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

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

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

    理一理AUTOSAR架構的喚醒源事件

    最近的項目負責網絡管理部分,網路喚醒和ECU系統的休眠關系緊密,對系統的喚醒源事件感覺理解的不是很透徹,今天就來理一理AUTOSAR架構的喚醒源事件。
    的頭像 發表于 07-14 09:11 ?4143次閱讀
    理一理<b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b><b class='flag-5'>下</b>的喚醒源事件

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

    小二之前只開發過異構雙核的芯片,各跑各的軟件(比如各自運行一套FreeRTOS,反正組件裁剪下也不大),針對類似Stellar,AURIX這樣的同構多核的軟件不了解; 比如針對AutoSAR,在
    的頭像 發表于 07-24 10:57 ?2682次閱讀
    <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 ?1277次閱讀

    AUTOSAR架構,持續集成CI的最佳實踐

    集成(CI)流程。今天,我們就來探討一基于AUTOSAR架構的CI流程實踐,并通過對流程的詳細講解,展示其在實際開發中的重要性和優勢。什么是AUTOSAR
    的頭像 發表于 10-24 08:06 ?565次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b><b class='flag-5'>下</b>,持續集成CI的最佳實踐
    主站蜘蛛池模板: 综合aⅴ| 6969精品视频在线观看 | 亚洲婷婷综合网 | 日本黄段视频 | 中文字幕一二三区乱码老 | 天天做天天看夜夜爽毛片 | 女同国产 | 一区在线播放 | 色综合天天综合网国产成人网 | 视频在线观看网站免费 | 欧美一卡二三卡四卡不卡 | 伊人久色| 一级毛片成人免费看a | 又粗又长又大又黄的日本视频 | 伊人狼人综合 | 成年网站在线在免费播放 | 成人手机看片 | 5g影院欧美成人免费 | 精品四虎免费观看国产高清午夜 | 99热精品久久只有精品30 | 国产精品视频一区国模私拍 | 国产片18在线观看 | 久久精品.com | 色婷婷久久合月综 | 在线看片国产 | 五月婷婷社区 | 色噜噜噜噜噜在线观看网站 | 欧洲不卡一卡2卡三卡4卡网站 | 色婷婷综合和线在线 | 大学生毛片 | 天天看天天干 | 老司机亚洲精品影院在线 | 免费在线观看的视频 | 色吧在线视频在线观看 | 美女视频永久黄网站免费观看国产 | 三级毛片在线播放 | 欧美在线视频7777kkkk | 97九色| 奇米在线 | 天天做爽夜夜做爽 | 国产综合视频在线观看 |