認識FreeRTOS
Calendar 3045年臘月初六
卓俊宏 (3163) 2018-01-22 00:10:13 MON
FreeRTOS是一個熱門的嵌入式裝置用即時作業系統核心,目前已經成功移植到35種不同的微控制器上。FreeRTOS採用MIT授權條款授權。網址如右:https://www.freertos.org/ 。以下為該網站目前首頁畫面截圖:

螢幕快照 2018-01-22 上午9.58.35.png

可以到官網下載zip檔,解開後可以看到兩個目錄:一個是FreeRTOS,一個是FreeRTOS-Plus。前者包含FreeRTOS real time kernel 原始碼,裡頭子目錄 demo 包含了porting 到各支援微控制器的範例。後者包含了額外的 元件或第三方工具。裡頭的demo目錄展示如何在 Windows 環境下安裝使用該模擬器。

FreeRTOS的設計小巧且簡易,整個核心程式碼只有幾個C檔案(tasks.c, queue.c, list.c, croutine.c, event_groups.c, stream_buffer.c, timers.c)、H檔目錄、portable目錄。目前版本是10.0。為讓程式碼容易閱讀、移植和維護,大部分的程式碼都是以C語言編寫,只有一些函式(多數是架構特定排班副程式)採用組合語言編寫。
螢幕快照 2018-01-22 上午10.14.33.png
目錄內的檔案介紹可以參考以下連結:
https://www.freertos.org/a00017.html


FreeRTOS提供許多方法以實現多執行緒(threads)、多作業(task)、互斥鎖(mutex)、號誌(semaphore)和軟體計時器(software timer),有個為低耗電應用程式提供的無計時(tick-less)模式,執行緒的優先權管理也有支援,此外,FreeRTOS提供了四種記憶體配置的模式:
  1. 僅配置(allocate only)
  2. 以非常簡易但快速的演算法進行配置與釋放
  3. 搭配記憶體合併,以較複雜但快速的演算法進行配置與釋放
  4. 搭配互斥保護,以 C 函式庫配置進行配置與釋放
FreeRTOS中沒有一些像Linux、Microsoft Windows等典型作業系統具有的先進特徵,例如裝置驅動程式、先進記憶體管理機制、使用者管理和網路管理,FreeRTOS著重在執行的簡潔與速度,FreeRTOS有時會被視為是一個『執行緒函式庫』而非『作業系統』,儘管可以找到命令列介面和類似POSIX I/O 介面的外掛模組。

FreeRTOS實作了多執行緒,主程式會在規律的短時間區間內呼叫一個執行緒時計方法,這個方法會以循環制依照任務的優先順序進行任務切換,一般來說,這個短時間區間介於 1/1000 秒與 1/100 秒之間,透過一個硬體時計中斷來計時,但這個區間經常隨著特定的應用而改變。


主要特色
  1. 記憶體足跡非常小,低負擔(overhead)且執行非常快速。
  2. 提供低電耗應用程式無計時選項。
  3. 對作業系統新手而言,很適合作為入門教材,對於專業開發者來說則適合用於商業產品開發。
  4. 排程器可以設定成可搶先(preemptive)或共同運作(cooperative operation)。
  5. 提供共用副程式(coroutine),在FreeRTOS中,共用副程式是一個記憶體堆疊用量非常有限但非常簡易輕巧的任務。
  6. 支援使用(generic trace macros. )。

FreeRTOS 的程式碼可以分為三個主要區塊:任務、通訊和硬體界面:
  1. 任務 (Task): FreeRTOS 的核心程式碼約有一半是用來處理多數作業系統首要關注的任務Task問題,Task 是擁有優先權的用戶所定義的 C 函數。task.c 和 task.h 負責所有關於建立、排程和維護任務的繁重工作。
  2. 通訊 (Communication): 任務很重要,不過任務間可以互相通訊則更為重要!它帶出了 FreeRTOS 的第二項議題:Communication。FreeRTOS 核心程式碼大約有 40% 是用來處理通訊的。queue.c 和 queue.h 負責處理 FreeRTOS 的通訊,任務和中斷(interrupt)使用佇列(佇列,queue)互相發送數據,並且使用 semaphore 和 mutex 來派發 critical section 的使用信號。
  3. 硬體界面:有近 9000 行的程式碼組成基本的 FreeRTOS,這部份是與硬體無關的(hardware-independent),同一份程式碼在不同硬體平台上的 FreeRTOS 都可以運行。大約有 6% 的 FreeRTOS 核心代碼,在與硬體無關的 FreeRTOS 核心和與硬體相關的程式碼間扮演著墊片(shim)的角色。我們將在下個部分討論與硬體相關的程式碼。

其他相關的RTOS有 SafeRTOS、OpenRTOS。迫不及待想要開始porting了嗎?最快方法是去買一塊類似 Arduino STM32 microcontroller,再利用上面提的 demo 目錄內的sample codes來改良。
Leaflabs_Maple_OSHW_with_STM32F103RBT6_MCU.jpg