FreeRtos於嵌入式環境的應用

億佰特物聯網實驗室 發佈 2022-06-23T19:03:57.123851+00:00

FreeRtos作業系統首先,應該介紹什麼是FreeRtos,他於單片機而言就是一個管理器,作為管理者管理嵌入式晶片中的任務,堆棧,中斷,隊列等等資源,對於作業系統而言,又分為實時作業系統和非實時作業系統,實時作業系統代表任務或者某個功能必須在指定的運行時間內完成,保證設備想要執

FreeRtos作業系統

首先,應該介紹什麼是FreeRtos,他於單片機而言就是一個管理器,作為管理者管理嵌入式晶片中的任務,堆棧,中斷,隊列等等資源,對於作業系統而言,又分為實時作業系統和非實時作業系統,實時作業系統代表任務或者某個功能必須在指定的運行時間內完成,保證設備想要執行的功能能立即得到執行,FreeRtos就是一個迷你型的實時作業系統內核。

作為輕量級的作業系統活躍於嵌入式行業當中。它占用的資源非常少,是為數不多的能夠在小型單片機上移植的作業系統,並且是完全免費的。包括在飛機、太空飛行器上,也在使用一些特別定製的實時嵌入式作業系統,來保證設備的正常運轉。

作為嵌入式實時作業系統,FreeRtos具有搶占式實時作業系統內核,也就是說任務之間有優先級的區分,比如一些需要實時響應的功能部分,可以把優先級設置得高一些,這樣當需要執行的時候,高優先級別的任務可以打斷別的低優先級任務,率先得到CPU資源,得到執行的機會。作為體量而言,他本身占用的rom空間與ram空間就非常小了,它還支持再往下地裁剪,可以將功能裁剪一部分,最小能夠只占用10kb左右的rom空間和大約10kb的ram空間。

互斥鎖—避免死鎖

同時FreeRtos內部就有互斥鎖,互斥鎖的作用在於避免死鎖的情況發生,由於任務運行可能會用到一部分的參數資源,CPU資源等等,當一個任務占用這些資源並且不釋放的時候,其他的任務是無法調用這些資源的。那麼試想,當兩個任務分別在執行的時候,雖然由於單核的原因,任務肯定有掛起的時候,但是掛起並沒有代表任務就釋放了這些資源,當兩個任務分別擁有對方想要使用的資源,所以都等待著對方釋放,當雙方都不釋放的時候,就會造成死鎖,兩個任務都將徹底卡死不再繼續執行,同時對於一些關鍵的代碼段而言,由於任務之間的調度,可能被多個任務執行過甚至更改過參數,這種情況也是需要避免的,這就是互斥鎖的意義,它保證在同一時刻,只能有一個線程去操作關鍵性的共享數據,保證數據不被多任務調用執行,保證任務的正確調度和數據的安全性。

信號量和消息隊列

FreeRtos還有信號量和消息隊列的功能。一個任務可以向消息隊列中添加信息,添加的多條信息按照FIFO先入先出的形式(這種形式也更適合數據信息處理)的方式被別的任務接收到,接收到後判定是否執行相關操作,這樣可以防止多任務的訪問衝突,也解決了中斷服務程序與任務之間的消息傳遞的問題。

總結

其實對於單片機或者嵌入式設備而言,FreeRtos並不是百利而無一害,既然作為管理者,肯定是需要CPU資源支持管理調度的,同時還有rom和ram的消耗,所以對於嵌入式設備而言,是否要上FreeRtos系統是一種權衡,如果小型的簡單邏輯設備,沒有必要捨近求遠去移植作業系統,直接裸奔就是最好的選擇,本身簡單的邏輯也不需要太多的管理支持。

但是隨著邏輯的增多,功能的增多,FreeRtos的必要性就會越來越高,因為邏輯的增多,我們更需要將精力集中於功能部分的開發而不是這些功能任務間的調度。任務的運行、掛起、就緒態之間的轉換,也正是FreeRtos的核心,要在眾多任務間做好這件事,並不容易,感謝有這麼一種開源免費的作業系統,來幫助開發者精力集中地進行開發,讓設備的運行更穩定、更加科學。

關鍵字: