正文
1. EcuM模塊中關于Multicore下電的流程概述
當ECU滿足休眠條件時,根據ECU的硬件設計會走Sleep或者Shutdown的過程。一般情況下,有SBC的ECU滿足休眠條件后走Shutdown流程下電;無SBC的ECU滿足休眠條件后走Sleep系統休眠的流程。
1.1 多核ECU走Sleep過程休眠
一般配置使用Flexible EcuM的項目在BswM模塊會自定義一個描述ECU狀態的狀態機,在ECU系統滿足休眠條件后會觸發Action調用EcuM_SelectShutdownTarget(ECUM_SHUTDOWN_TARGET_SLEEP),之后根據需求調用EcuM_GoHalt(深度休眠系統一般調用GoHalt)或者EcuM_GoPoll().
Figure 1: SLEEP Phase
Figure 2: Master Core GoSleep Sequence
Master Core的GoSleep Sequence中需要調用EcuM_EnableWakeupSource()這個Callout函數(需要用戶自定義)配置ECU休眠后的喚醒源。
Figure 3: Slave Core GoSleep Sequence.
Slave Core的GoSleep Sequence同樣需要調用EcuM_EnableWakeupSource()這個Callout函數。
Note: 個人理解Slave Core的GoSleep Sequence中調用EcuM_EnableWakeupSource()不需要做啥,因為喚醒的時候Master Core會調用StartCore喚醒Slave Core。
Figure 4: Master Core Halt Sequence
Master Core進入到Halt Sequence后會先等待Slave Core,多核完成同步后調用MCAL_MCU模塊提供的Mcu_SetMode()接口設置Master Core進入HALT深度休眠狀態。休眠后喚醒過程,本文暫不深入論述。
Figure 5: Slave Core Halt Sequence.
Slave Core的Halt Sequence過程基本和Master Core的過程一樣。
Note:多核ECU走Sleep休眠過程沒有OS的參與。
單核ECU走Sleep過程請參考:AUTOSAR架構下RH850芯片深度休眠配置實踐-Conifig EcuM and BswM
1.2 多核ECU走Shutdown下電
在ECU系統滿足休眠條件后觸發Action調用EcuM_SelectShutdownTarget(ECUM_SHUTDOWN_TARGET_OFF),之后根據需求調用EcuM_GoDown().
Figure 6: Shutdown Phase.
Figure 7: Master Core OffPreOS Sequence
Master Core進入OffPreOS Sequence后最關鍵的就是調用ShutdownAllCores完成多核同步。
Figure 8: Master Core OffPostOS Sequence
Master Core完成多核同步后進入OffPostOS Sequence,調用EcuM_AL_SwitchOff()這個Callout函數完成ECU Shutdown Off。
Example:
VoidEcuM_AL_SwitchOff(void) { Cdd_SBC_GotoSleep();//給MCU下電 };
Figure 9: Slave Core OffPreOS Sequence.
因為Master Core調用EcuM_AL_SwitchOff ()后MCU已經下電了,Slave Core不用也來不及做啥操作了。
Figure 10: Slave Core OffPostOS Sequence.
2. OS模塊中關于多核Shutdown的描述
MasterCore滿足Shutdown Off條件后調用ShutdownAllCores(), 在ShutdownAllCores()中發送Signal給到Slave Core觸發Shutdown, 同時在ShutdownAllCores()中實現多核同步(Note: 后文實例代碼講解)。然后,所有的核都會àShutdowHook() àEcuM_Shutdown() àEcuM_AL_SwitchOff (Callout函數,中間調用用戶自定義的真正的Shutdown函數) àCdd_SBC_GotoSleep().
Figure 11: Example of a shutdown procedure.
3. 多核下電的具體實現
3.1 MICROSAROS中X-Signal
X-Signal用于MICROSAROS中跨核通信,具體通過MCU中未被使用的ISR中斷資源實現。
3.2 MICROSAR中Multicore Sleep
MICROSAR在Multicore上走SleepSequence時可以配置只有Master Core走Sleep,也可以選擇多Master andSlaveCore都走Sleep Sequence。如果走多核Sleep,則在BswM模塊中需要需要為每個Core配置ECU狀態機,滿足ECU Sleep條件后調用EcuM_GoHalt()/EcuM_GoPoll().
多核同步在EcuM_GoHalt()或EcuM_GoPoll()中完成。
3.3 MICROSAR中Multicore Shutdown
MICROSAR在Multicore上走Shutdown Sequence時所有的核都得走Shutdown Sequence,那么在BswM模塊需要為每個Core配置ECU狀態機,滿足Shutdown Off條件后調用EcuM_GoDown().
EcuM_ShutdownOS這個Callout函數中調用OSAPIShutdowAllCores()完成多核同步。
3.4 ShutdownAllCores中的核同步
Action 1:Master Core中Os_ShutdownAllCores()調用Os_TrapCallShutdownAllCores().
Action 2:Master Core中Os_TrapCallShutdownAllCores()調用Os_Api_ShutdownAllCores().
Action 3:Master Core中Os_Api_ShutdownAllCores()調用Os_SystemShutdown().
Action 4:Master Core中Os_SystemShutdown()調用Os_XSigSend_ShutdownAllCores()給Slave Cores發送Shutdown信號。
Action 5:Slave Core接收到Signal后調用Os_CoreShutdowAllLocal().
Action 6:Slave Core中Os_CoreShutdowAllLocal()調用Os_CoreShutdown().
Action 7:Master Core和Slave Cores都調用Os_CoreShutdown(),通過OsBarriers機制完成多核同步,最后都調用ShutdownHook().
OsBarriers機制參考:AUTOSAR架構下多核啟動
3.5 EcuM_GoHalt中的核同步
Master Core和Slave Core都調用EcuM_GoHalt(),然后:
MasterCore在EcuM_GoHalt()調用EcuM_EnterSleep().
SlaveCore在EcuM_GoHalt()調用EcuM_EnterSleepOnSlave().
MasterCore中EcuM_EnterSleep()調用EcuM_ShutdownSynchronization().
MasterCore中EcuM_ShutdownSynchronization()通過一個do while()循環等待所有Slave Core是否到達Sleep狀態,EcuM_GetCoreStatusValue()就是獲取Slave Core狀態。
Master Core在調用EcuM_ShutdownSynchronization()之前會調用EcuM_SetCoreStatusValue()設置MasterCore進入到Sleep狀態。
Slave Core中EcuM_EnterSleepOnSlave()調用EcuM_SetCoreStatusValue()設置Slave Cores進入到Sleep狀態,最后調用EcuM_McuSetMode()進入深度休眠Halt.
EcuM_SetCoreStatusValue(CoreID)和EcuM_GetCoreStatusValue(CoreID, CORE_STATE)其實就是在設置和訪問三個標識核狀態的全局變量。
Note: 標識三個核狀態的全局變量應該鏈接在三個核都能訪問的共享RAM里面,保證三個核都能訪問的到。
4. 總結
問題 1: ECU走Sleep過程休眠過程如何實現多核同步?
答:Multicore ECU走Sleep過程通過EcuM_GoHalt()/EcuM_GoPoll()實現核同步,具體參考3.5章節。
問題 2:ECU走Shutdown Off過程下電如何實現多核同步?
答:Multicore ECU走Shutdown過程下電通過ShutdownAllCores()實現核同步,具體參考3.4章節。
審核編輯:劉清
-
AUTOSAR
+關注
關注
10文章
363瀏覽量
21639 -
SBC
+關注
關注
0文章
78瀏覽量
19215 -
ecu
+關注
關注
14文章
890瀏覽量
54600 -
狀態機
+關注
關注
2文章
492瀏覽量
27591 -
MCU芯片
+關注
關注
3文章
253瀏覽量
11568
原文標題:AUTOSAR架構下多核Shutdown
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論