關於Autosar操作系統(OS)

本篇文章將主要以介紹性爲主,只是方便大家瞭解,來介紹Autosar操作系統。希望閱讀本篇文章達到的目的是大家可以瞭解Autosar操作系統中包含的一些基本內容。

我會主要從以下幾個方面,讓大家快速瞭解 Autosar OS:

1. 爲什麼需要嵌入式操作系統

2. Autosar Os的基本內容

  2.1 Autosar Os中所有對象的關係

  2.2 Core

  2.3 Application

  2.4 Counter

  2.5 調度表

  2.6 Alarm

  2.7 Task

  2.8 Interrupt

  2.9 Event

  2.10 Resource

  2.11 Spinlock

  2.12 IOC

 

1. 爲什麼需要嵌入式操作系統

早前,在比較簡單的嵌入式軟件中,一般是不需要操作系統的,相信很多嵌入式開發的小夥伴都瞭解,在Main函數中,寫一個超循環(While),然後加一個定時器,分時間片的方式,定時去執行代碼,就完成了簡單的調度功能。然而當嵌入式軟件變得越來越複雜時,這種簡單粗暴的調度方式就無法滿足要求了,舉個例子,假如有個這樣的需求,軟件中 需要調度的有1ms,2.5ms,3ms,7ms,9ms,11ms,73ms...等等不同週期要求的任務時,這個時候,用超循環去執行,你會發現分時間片的方式幾乎無法實現(太難了),再舉個例子,如果有多個core,多個core之間還有通信的要求,這個時候就需要一個專門的軟件來管理了,因此就需要這麼一個叫操作系統的軟件,來管理這些調度。

上面核心是想引出,所謂操作系統,就是管理系統調度的一個軟件組件,以滿足複雜一點的調度。下面我會盡可能的通俗簡單的,針對OS中每個對象元素進行說明。

2. Autosar Os的基本內容

2.1 Autosar Os中所有對象的關係

(不畫圖了,上傳有點麻煩,建議大家在草紙上自己畫一個,方便理解)

說明1:Task、Interrupt、Alarm、調度表/schedule Table、Resource、Event 我們稱他們叫對象(Object)

說明2:【OS 包含1~N個Core】  -- 【1個Core 包含1~N個Application】--【1個Application 包含0~N個Object】

舉個小栗子,方便大家記住:

OS是一【片】水塘,Core是其中一【個】水塘,Application是水塘裏面一個【水箱】,Object就是水箱裏面各種魚。

其實,就這麼簡單,他們之間主要的包含關係就這樣啦,但是水塘-水箱-以及魚之間的關係咱在下面掰扯掰扯啦。

2.2 Core

Core就是我們所說的水塘了,我們都聽過我們的手機是什麼8core-16core(賊牛逼了),Core其實並不神祕,他就是指向我們的代碼,然後一行一行的執行,(這裏說說芯片內核)它裏面的東西一般有個指令獲取單元、指令執行單元以及地址寄存器和數據寄存器,代碼在Core上執行過程就是 把代碼抓過來 -- 翻譯一下--計算一下(邏輯運算)-- 存一下,然後下一條。我們簡單總結一下,所謂的Core,其實就是一個可以獨立執行代碼的單元。

2.3 Application

Application就是我們所說的水箱,其實從字面意思理解,它是一個應用,準確點說,它是一個進程。它部署到某一個Core上,它主要的作用就是管理放到其中的對象(也就是管理水箱裏面的魚),爲啥要有這玩意呢?魚直接放到水塘不就可以嗎?舉個不恰當的例子,假如一條魚(一個對象)生病了,完啦完啦,還是傳染病,那麼整個水塘的魚都遭殃了,如果有個水箱圈起來,那麼頂多也就那個水箱的魚遭殃。再舉個例子,假如你手機裏面淘寶不能用了,整個手機都變磚頭,你會作何感想?所以,Application其實就是一個獨立管理一部分OS 對象的單元,它可以獨立啓動,關閉,或重啓。那麼Autosar Os中,對它還有一個重要的作用,就是功能安全上的應用,這個如果想進一步瞭解可以留言諮詢。

2.4 Counter

好吧,水塘水箱的例子,在後面不太適用了,這裏我把Counter比作 心臟吧,或者對於芯片來說,它就是晶振了,因此它在操作系統的作用就是計時或者計數,一般Counter與芯片的Timer結合起來,Counter的精度決定了操作系統能計時的準確度。

2.5 調度表 或 Schedule Table

字面意思理解,你可以認爲它就是包含了很多調度點的一個表,Autosar Os中一般這麼用調度表,比如有 1ms 2ms 3ms 三個週期需要調度的任務,那麼它會根據公約數,生成一個表,這個表在1ms 處調度1ms任務,2ms處調度1ms和2ms任務,3ms處調度1ms和3ms任務,4ms處調度1ms和2ms任務,5ms處調度1ms任務,6ms處調度1ms,2ms,3ms任務,然後按照這樣的關係循環,這就是所謂的調度表,目前有部分主流的Autosar開發商使用這種方式進行任務的調度。

插句話:此外,這種Schedule Table有自己的狀態機,這裏不做詳細介紹,個人認爲,相對Alarm的調度方式,Schedule Table調度方式最大的好處在於調度上可以同步。

2.6 Alarm

字面意思理解,警報器,其實它就像我們上課的鈴聲,到點它就響應。其實操作系統用它來也是做一些定時的事情,比如定時激活一個Task。前面我們講到Schedule Table也可以激活Task,那麼Alarm和它還是有些區別的,Alarm一般只做一個定時任務,如果有1ms,2ms,3ms的調度任務的話,一般會對應三個Alarm,一個Alarm做1ms定時,定時到了就去激活1ms的任務,然後進行1ms任務的調度,2ms,3ms的任務以此類推進行調度。

2.7 Task

其實Task應該是大家都比較熟悉的,Autosar Os中它有些自己的性質,下面說說它都有哪些性質。

Task 類型:

  Basic Task:包含狀態Ready Running Suspend

  Extend Task:包含狀態Ready Running Suspend + Waiting

所謂的擴展task,就是多了一個Waiting狀態,因此它一般就是等待一個Event的到來。

符合類:

  BCC1:基本Task,不可被重複激活(激活1次,在Ready和Running下不可再激活)

  BCC2:基本Task,可被重複激活

  ECC1:擴展Task,不可被重複激活

  ECC2:擴展Task,可被重複激活

此外Task的調度分爲可搶佔以及不可搶佔,對於可搶佔的Task,OS會根據Task的優先級進行排序調度,優先級高的可以搶佔優先級低的。

Task就是OS中的一個調度單元,OS的很多內容都是圍繞它進行管理的。比如上文提到的Alarm Schedule Table 都是用作定時去激活 Task,此外下文還是提到Event,其也和Task關聯起來用。

2.8 Interrupt

中斷的概念,對於嵌入式開發的小夥伴來說,應該都比較熟悉,下面我僅僅說明一下在OS中中斷的特殊概念。

Autosar OS中將中斷分爲Cat1 和Cat2,即所謂的1類中斷和2類中斷,所謂的2類中斷其實就是完全被OS接管的中斷,這類中斷的上下文切換,堆棧管理全部由OS管理;而1類中斷則不被OS接管,因此它的上下文由自己管理。另外Autosar Os中要求Cat1的中斷的最低優先級高於Cat2的最高優先級,也就是說Cat1的中斷優先級更高。所以Cat1的中斷一般用於時間要求更緊急的場合。

 2.9 Event

事件僅僅和上文提到的擴展Task綁定在一起來實現一個調度功能,那麼它的應用場景是什麼樣的呢?其實是隨處可見的,比如你按下鼠標左鍵 點擊 【確定】按鈕  這就是一個Event,那麼你點擊了,會發生什麼事呢,這就是這個事件發生後,綁定到這個Task後需要調度的事情,比如關閉彈出。雖然嵌入式沒有界面,但是意思一樣,下面以一段僞代碼說明一下:

Task

{

    A_Function();

    B_Function();

    WaitingEvent('"click Confrim");/*點擊確定*/

    C_Function();/*關閉窗口*/

}

還有三章小節,但對Autosar Os已經有個基本瞭解了,就說到這裏吧,想進一步深入瞭解的,可以看看Osek Os VDX 這類文檔,或者也可以進行交流 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章