FreeRTOS介紹與源碼結構分析

FreeRTOS簡介

FreeRTOS,全稱Free Real Time Operating System,即免費的實時操作系統。相比於計算機中用到的Windows,MacOS,Linux等操作系統,實時操作系統(RTOS)是一種輕量級的操作系統,適用於嵌入式硬件中,用於解決單片機類裸機輪詢方式在處理多個任務時的實時性不高的問題。

目前的實時操作系統有好多種,除FreeRTOS外,還有μCOS、RT-Thread、RTX、Alios Things、Huawei LiteOS等。

什麼是RTOS?

實時操作系統(RTOS)的主要特點是可以實現多任務,與多任務系統相對的是裸機系統。

裸機系統

裸機系統就是最初我們學習單片機編程時接觸的那種編程方式,main函數中一個while大循環依次處理各個模塊的任務,對於需要及時檢測的事件會使用中斷。這種使用大循環的程序運行方式也叫輪詢系統,加上中斷處理函數後又稱前後臺系統,中斷處理稱作前臺,無限循環稱作後臺。

多任務系統

多任務系統是將各個處理模塊編寫爲單獨的任務,每個任務本身是個無限循環,程序運行初期會創建各個子任務,通過任務調度的方式,利用各任務的阻塞時刻不斷切換運行各個任務,達到一種看起來是多個任務在同時運行的一種效果。並且,通過中斷標誌以及任務間通信的相關機制,可以實現任務之間的快速響應。

FreeRTOS特點

  • 使用免費!
  • 系統簡單小巧、文件數量少、通常情況下內核佔用4~9k字節空間
  • 搶佔式內核
  • 代碼主要由C編寫,可移植性高,已實現在30多種架構的芯片上移植
  • 任務與任務,任務與中斷間的通信方式包括:信號量、消息隊列、事件標誌組、任務通知
  • 具有優先級繼承特性的互斥信號令,避免優先級反轉問題
  • 高效的軟件定時器

FreeRTOS源碼目錄結構

這裏以FreeRTOS v9.0.0版本爲例,代碼包含FreeRTOS和FreeRTOS-Plus文件夾,後者是一些補充文件,初學者用不到,可以先忽略。在FreeRTOS文件夾中主要關注source文件夾,這裏是FreeRTOS的全部源碼,包括6個c文件和include文件夾下的多個h文件。另外,在portable文件夾下,是針對不同硬件平臺的單獨區分使用的代碼,目前考慮使用Keil開發STM32F407,所以portable文件夾只需使用RVDS的ARM_CM4F以及MemMang。

關於各個c文件的主要用途:

  • port.c : 針對不同硬件平臺的接口
  • heap_4.c : 內存管理相關
  • croutine.c : 協程相關
  • event_groups.c : 事件標誌組相關
  • list.c : 列表,FreeRTOS的一種基礎數據結構
  • queue.c : 隊列相關
  • tasks.c : 任務創建、掛起、恢復、調度相關
  • timers.c : 軟件定時器相關

另外在Demo文件夾下還需要用到一個FreeRTOSConfig.h,該文件中通過各種宏定義的方式來配置FreeRTOS需要使用哪些資源。
在這裏插入圖片描述
FreeRTOS v9.0.0源碼鏈接:

https://pan.baidu.com/s/1WDygPLTDZJBAeNQ0uWaJsQ 提取碼:ky2e