AUTOSAR基礎(chǔ)篇之OS(下)
瀏覽:3176
作者 | 奮斗的農(nóng)民工
來源 | ADAS與ECU之吾見
首先,請問大家?guī)讉€小小的問題,你清楚:
-
你知道多核OS在什么場景下使用嗎? -
多核系統(tǒng)OS又是如何協(xié)同啟動或者關(guān)閉的呢? -
AUTOSAR OS存在哪些功能安全等方面的要求呢? -
多核OS之間的啟動關(guān)閉與單核相比又存在哪些異同呢? -
。。。。。。
-
SC1: OSEK OS + Schedule Table; -
SC2: OSEK OS + Schedule Table + Timing Protection; -
SC3: OSEK OS + Schedule Table + Memory Protection; -
SC4: OSEK OS + Schedule Table + Timing Protection + Memory Protection;
-
現(xiàn)象: 任務(wù)1的運行時間超過其截止時間時,任務(wù)A本身可能并沒有出錯; -
過程: 在執(zhí)行任務(wù)1之前的任務(wù)2頻繁的搶占或者過長的阻塞資源的訪問; -
原因: 正由于任務(wù)2的上述行為,進而導(dǎo)致任務(wù)1執(zhí)行超時,從而直觀的認(rèn)為任務(wù)1發(fā)生錯誤便停止任務(wù)1,反而讓真正的罪魁禍?zhǔn)兹蝿?wù)2繼續(xù)逍遙法外,這就不合情理,也起不到對OS中各任務(wù)的時間保護。
-
由于任務(wù)A優(yōu)先級最高,因此任務(wù)A先執(zhí)行; -
1個Tick之后任務(wù)B開始執(zhí)行,3個Tick之后任務(wù)C執(zhí)行; -
當(dāng)任務(wù)C執(zhí)行1個Tick后被任務(wù)A打斷,任務(wù)A執(zhí)行完畢后,任務(wù)C繼續(xù)運行; -
到第10個Tick任務(wù)C執(zhí)行完畢,周而復(fù)始,整個過程并未出現(xiàn)超時現(xiàn)象,并且仍有一個Tick的空閑狀態(tài);
-
任務(wù)A的第二個周期與任務(wù)B的第一個周期都出現(xiàn)運行時間過長的現(xiàn)象,但并沒有超過其截止時間。 -
任務(wù)B在第二個周期提前進入運行狀態(tài),但也未超過其截止時間; -
任務(wù)C按照正確的方式運行,但由于任務(wù)A與任務(wù)B的出錯導(dǎo)致任務(wù)C運行超時,則發(fā)生超時錯誤;
-
靜態(tài)任務(wù)或者中斷的執(zhí)行時間上限; -
被低優(yōu)先級任務(wù)鎖住共享資源或屏蔽中斷所引起的阻塞時間; -
任務(wù)或者中斷之間的間隔執(zhí)行時間;
-
時間保護僅僅用于任務(wù)或者二類中斷,對于一類中斷不起作用; -
在OS未開啟之前,時間保護將不起作用; -
對于Trusted OS Application, OS應(yīng)當(dāng)有能力提供一種基于任務(wù)或者二類中斷的時間保護,而對于Non-Trusted OS Application,OS必須提供為這個非信任的OS Application中的每一個任務(wù)或者二類中斷提供時間保護;
-
即每一個OS Application和其中的OS Object都有各自的私有棧,不同的OS Object無需存在共享棧。棧保護能夠更為快速的檢測出棧溢出,同時棧保護也是劃分OS Application的一種方式和依據(jù)。
-
每一個OS Application和其中的Objects都具備各自私有數(shù)據(jù),同時OS Application的私有數(shù)據(jù)區(qū)就是從屬于該OS Application的Objects的共享數(shù)據(jù)區(qū);
-
代碼區(qū)既可以被私有,也可以被共享,在沒有代碼保護的前提下,錯誤代碼的執(zhí)行會導(dǎo)致內(nèi)存,時間和服務(wù)上的出錯。
AUTOSAR多核OS啟動與關(guān)閉
-
主核Core 0完成前期的硬件初始化之后啟動從核Core 1 并隨后調(diào)用Start OS函數(shù)來啟動OS,OS完成初始化之后在第一個同步點等待所有從核完成OS的啟動。 -
從核Core 1被主核啟動之后,首先完成硬件相關(guān)的初始化,然后激活從核Core2,Core3,并在第一個同步點等待其余從完成OS的啟動; -
從核Core2,Core3被Core 1激活之后,首先完成各自的硬件相關(guān)初始化,然后調(diào)用StartOS完成OS的初始化并在第一個同步點進行同步; -
在完成第一個同步點之后,主從核便分別執(zhí)行Startup Hook函數(shù)之后在第二個同步點進行同步,然后所有核的Kernel將一起運行,只有這樣才能夠更好的保證整個系統(tǒng)的穩(wěn)定性與魯棒性。
-
反初始化BswM以及BSW調(diào)度器; -
檢查是否存在喚醒事件發(fā)生; -
選擇ShutDown Target; -
關(guān)閉OS;
-
AUTOSAR4.x不支持僅僅關(guān)閉單個核,即若發(fā)送關(guān)閉指令或者致命錯誤時所有核必須全部關(guān)閉,具體的關(guān)閉過程如上圖所示; -
若某一任務(wù)擁有調(diào)用ShutDown All Cores的權(quán)限時,關(guān)閉信號將會同步發(fā)送至所有核; -
當(dāng)關(guān)閉過程啟動后,所有的中斷服務(wù)和任務(wù)都不能被激活,關(guān)閉前必須完成的程序由EcuM保證完成; -
關(guān)閉完成前,各自的OS Application調(diào)用各自的Shutdown Hooks函數(shù)完成對應(yīng)的回調(diào)程序,然后等待到同步點所有核執(zhí)行關(guān)閉回調(diào)函數(shù)。
AUTOSAR多核OS調(diào)度
AUTOSAR多核OS通信(IOC)
-
接收端實體被周期性調(diào)用通過Rte_Receive從RTE接收來自Core0的數(shù)據(jù); -
發(fā)送端調(diào)用函數(shù)Rte_Send函數(shù)發(fā)送數(shù)據(jù),進而調(diào)用Ioc_Send函數(shù)寫入數(shù)據(jù)到Buffer中; -
接收端便會通過Ioc_Read函數(shù)讀取共享內(nèi)存中的Buffer數(shù)據(jù),并傳遞給到Rte_Read函數(shù)中供Core1中的SW-C使用。
-
Send/Receiver通信; -
隊列或非隊列通信; -
1:1通信;
-
發(fā)送端調(diào)用函數(shù)Rte_Call函數(shù)進而調(diào)用函數(shù)IocSend函數(shù),將數(shù)據(jù)寫入IOC內(nèi)部隊列緩存中; -
Rte_Call函數(shù)使用OS調(diào)用激活接受從核的服務(wù)任務(wù)來通知接收端; -
接收端被激活的該任務(wù)將負(fù)責(zé)調(diào)用IocReceive函數(shù)從IOC共享內(nèi)存Buffer中讀取數(shù)據(jù)并將數(shù)據(jù)傳輸至服務(wù)端的運行實體中; -
Core1中服務(wù)函數(shù)的結(jié)果會被反向傳輸至Core0的客戶端中。
-
帶通知的Send-Receiver通信; -
Client-Server通信,在此類情況下,RTE需要將服務(wù)轉(zhuǎn)換為1:1的Send-Receiver模型通信,同時將服務(wù)結(jié)果反向傳輸?shù)娇蛻舳说倪^程轉(zhuǎn)換為另外一組Send-Receiver通信; -
隊列或者非隊列通信; -
1:1通信,如果接受端沒有被周期性的調(diào)用; -
N:1通信;
-
報警器可以激活基本任務(wù)A或者設(shè)置某事件1; -
擴展任務(wù)B等待事件1那邊可以激活基本任務(wù)C; -
基本任務(wù)C可以設(shè)置某事件2,中斷可以設(shè)置某事件3; -
擴展任務(wù)D等待事件2和事件3之后便可以開啟執(zhí)行; -
基本任務(wù)E可以通過IOC機制實現(xiàn)與基本任務(wù)A之間的數(shù)據(jù)交互;
技術(shù)鄰APP
工程師必備
工程師必備
- 項目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















