Autosar OS是一個很微小,但是卻非常高效的實時操作系統。

其中包括Task, ISR,Alarms等。

ISR是硬體觸發方式, 一般都是ISR都會hard coded在硬體上,一旦被觸發,CPU會直接執行相應代碼,優先順序總是高於所有Task。

每一個Task都可以是一個while(1)循環體,每一個Task都可以定義優先順序,是否自動運行,Stack大小,以及是否周期執行,調度方式(搶佔or非搶佔),以及包含幾個Event.

以一個小例子,來梳理一下Autosar OS配置工作:

假設我們打算開發一款後視攝像機,圖像可以顯示到車前方顯示器上,並且擁有基於圖像演算法的行人識別功能並緊急剎停。

首先實現一個watchdog的Task, 當系統的主程序發生某些錯誤事件時,如假死機或未定時的清除看門狗計時器的內含計時值(多半是向對計時器發送清除信號),這時看門狗計時器就會對系統發出重置、重啟或關閉的信號,使系統從懸停狀態恢復到正常運作狀態。

需要一個視頻輸出Task, 也就是說實時把圖像傳輸到屏幕上。一段偽代碼:

TASK(Video_Out_Task)
{
do {
Ret = WaitEvent(Video_Out_START_EVENT);
if (E_OK != Ret) {
ReportError
}
Video_Out_Run();
} while(1);
Ret = TerminateTask();
}

static void Video_Out_Run(void)
{
BlaBlaBla;
}

推薦閱讀:

相关文章