【Zeekr_Tech】汽車軟體RTOS-之AUTOSAR OS多核控制簡介

Zeekr_Tech發表於2022-04-15

極氪軟體及電子中心 jojo

實時作業系統(RTOS)是指當外界事件或資料產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統做出快速響應,排程一切可利用的資源完成實時任務,並控制所有實時任務協調一致執行的作業系統。

       與實時作業系統對應的就是非實時作業系統了,例如Linux(可以透過給核心打上RT補丁使其變為實時作業系統),windows。這類作業系統將系統處理機時間和記憶體空間按照一定的時間間隔,輪流地切換給各終端使用者的程式使用,會給低優先順序程式分一些執行時間,避免高優先順序重負載任務把鍵盤滑鼠控制檯桌面之類堵死。

       實時作業系統有很多如μCos、FreeRTOS、Vxworks、QNX、Osek os。AUTOSAR的core OS就是OSEK,他早已廣泛應用於汽車工業。OSEK源於德語,是一種嵌入式作業系統,被設計用於提供整車的各種電子控制單元的軟體系統。AUTOSAR OS 向後相容OSEK OS,基於OSEK OS 擴充套件了一些特性和需求,比如記憶體保護(memory protection)和時間保護(time protection)等。

OS-Application是AUTOSAR OS 的重要的功能單元, 負責收集作業系統物件,如Tasks, ISRs, Alarms, Schedule tables, Counters等。

AUTOSAR_SWS_OS規範中7.6章節對AUTOSAR OS的框架定義。其中包含:

序號

作業系統物件

作用

1

APPLICATION

OS-APP,負責收集作業系統物件

2

SCHEDULETABLE

排程表

3

ALARM

報警器,一般用於在作業系統執行過程中,可進行實時的報警週期設定,典型的用於功能安全相關的排程機制

4

COUNTER

計數器

5

TASK

週期任務

6

ISR

中斷任務,響應外部和內部事件觸發的中斷

7

ErrorHook

當軟體執行遇到Error,呼叫hook

8

StartupHook

當軟體上電且需要從boot進入到作業系統之前,往往需要呼叫hook,完成啟動操作。

9

ShutdownHook

軟體下電且需要退出作業系統,往往會呼叫hook,跳轉到shutdown完成下電操作。

       如果在系統中使用OS-Application,則所有的Task, ISR, Counter, Alarm, Schedule Table都必須屬於某一個OS-Application 。

       接下來我們來聊聊AUTOSAR作業系統中的多核處理。AUTOSAR中的多核作業系統並不是一個虛擬ECU概念,而是一個共享相同配置和大部分程式碼的作業系統,但是不同的核上進行不同的運算。作業系統的生成部分的相關資訊來源於同一個配置。這意味著,ID(例如TASKID、RESOURCEID…)在核之間是唯一的。任務的優先順序定義來源於排程表的配置。因此多個核心可以真正並行執行,可以同時執行多個任務。

1.       Startup階段。初始化MCU,每個核完成EcuM_Init() (AUTOSAR定義功能),且每個核完成StartOS。

2.       執行階段。從啟動模式切換到作業系統執行模式,完成OS:Startuphook,並開始作業系統的執行,e.g. 10ms, 100ms等週期性任務開始執行。

3.       Shutdown階段。從OS執行模式切換到下電模式。下電關閉程式由BswM和EcuM協調。所有核上的EcuM都表明它們已經準備好了關閉,EcuM在主核心上呼叫shutdownallcore(),完成整個ECU的下電。

   

在AUTOSAR OS中具體的分配策略有如下幾種:

1)ChainTask鏈任務機制

什麼是ChainTask機制,AUTOSAR規範中又是如何定義的呢?一個鏈任務由幾個任務組成,每個鏈任務OS-Mechanism相互啟用。所以不同的任務可以按照定義的順序在不同的核上執行。

例如下圖所示。左邊是單核晶片core X,右邊是雙核晶片core Y和core Z。

原來任務Task A是單獨在單核晶片core X上執行, Task A => proc1(); proc2(); proc3(); proc4()。當把Task A拆分為兩個任務Task A’和Task A’’ 並且分別在2個單獨的核core Y和core Z上執行時,鏈任務ChainTask機制確保,流程順序是與任務A一樣,在不同的核心中執行。

        跨核task又是如何開銷ChainTask呢?例如下圖所示。拿1ms任務舉例,首先Core X觸發OS_BswStart_1ms_Task任務,由於鏈任務的作用,直接跨核到Core Y執行OS_1ms_Task,執行完後又透過鏈任務跨核回到Core X執行OS_BswEnd_1ms_Task。這種任務鏈的缺點會開銷runtime,比如1ms的任務,2次的來回的Chaintask,大約會開銷2x30us的負荷,約佔6% runtim

2)分散式執行機制

分散式執行機制,AUTOSAR規範中解釋為”task clusters are freely distributable”。該分散式執行機制是當前AUTOSAR多核式的主流,task在一個核上執行,不存在跨核之間的鏈任務,耦合性不高。缺點是容易造成不同核之間的負荷不均。如下圖所示,某一個雙核的控制器Core X執行所有CAT1 的中斷,Core Y執行所有的週期性任務,不存在跨核間的排程,所有的任務都在自己的核上單獨執行。

作業系統的執行時間可以透過最佳化減少資料的訪問時間來實現。如下圖舉例。某個3核的MCU,Core0為Peripheral Core,Core 1為Locked Core,Core 2為Performance Core。每個core都有單獨的RAM分別為RAM0,1,2,同時透過匯流排外部掛有system Ram。透過下圖可以發現當core1訪問自己的RAM1只需要1個tick的時間,而core1訪問core2的RAM需要9個tick的時間。同時訪問外掛system ram需要9個tick的時間。

由此可見,當程式碼執行在特定的核心上,儘量把該段功能所屬的變數定義在相同的RAM上,以便最佳化核減少執行時間。我們在做功能開發的時候特別需要關注變數的分配和任務的分配,使其儘量保持一致,以便減小MCU的開銷。優秀的軟體工程師透過最佳化記憶體,可以降低10%左右的負荷。

AUTOSAR的軟體架構已經成為汽車電子控制領域不可逆轉的趨勢,當前國內不少車企,已經把非AUTOSAR軟體架構的電子控制器供應商排除在供應商目錄之列。同時隨著汽車電子晶片的飛速發展,用於AUTOSAR Classic的MCU也發展迅猛。迅速從單核跨入到多核時代,主頻和記憶體空間也有了大幅度的提升。很多車型已經整合了基於AUTOSAR的軟體架構和多核晶片的控制單元,以滿足日益複雜的電子電器架構。目前,極氪的軟體及電子中心正在開發下一代行業頂尖的ZEEA3.0電氣架構平臺,其中的中央計算平臺CSC(Core Super Computer)包含A核和M核,A核上執行由極氪自研的ZEEKR_OS ,M核上將執行Classic AUTOSAR OS來實現多核處理,因此本文介紹基於AUTOSAR OS和多核控制晶片的控制策略,幫助大家儘快理解基礎軟體的執行架構。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015448/viewspace-2887337/,如需轉載,請註明出處,否則將追究法律責任。

相關文章