FreeRTOS 簡介

FreeRTOS 簡介


FreeRTOS 是一個嵌入式實時操作系統,什麼是實時操作系統呢?

對於一個嵌入式系統,比如說一個數據採集器,他需要不停地採集數據併發送給主機,例如有三個任務,一個是採集任務,一個是發送任務,一個顯示任務。正常情況下,應該是先採集再顯示併發送,理想中顯示和發送是同時進行的。但是我們的MCU在一個時刻只能跑一個任務,也就是說必有個先後關係,我們可以認爲定義順序如下——採集->發送->顯示。

那麼考慮複雜一點的情況,如果此時發送任務沒有等到數據,他就會停在這裏等待,然而這就導致了顯示任務不能正常進行。這就不能稱爲實時。這個例子也許還不能完全體現實時系統的重要性,如果我們將場景設定爲自動駕駛,我們的控制和感知系統的實時性凸顯的尤爲重要,一個意外的延遲會造成安全性的極大下降。還有更多的場景,這裏就不一一列舉了。當然,除了實時性的優點,RTOS也具有較強的擴展性和易用性,方便開發者進行開發。總之,RTOS在很多場景中都是不可或缺的。

對於FreeRTOS來說,嚴格意義上來說還不能稱爲實時,因爲他只是相當於分時複用,比方說我們把一個時間單位設定爲1ms,那麼我把這1ms可以分爲很多的細分,每個細分上跑不同的任務,這樣在宏觀上看就相當於實時系統了。真正的實時系統,就是實現並行的操作,比如說FPGA,這裏不再贅述。常見的RTOS,還有 μCOS\mu COS 、VxWorks等

下圖是2019年EETimes統計的最常用的操作系統排名,供大家參考
在這裏插入圖片描述

FreeRTOS 架構

在這裏插入圖片描述
一個FreeRTOS 系統主要由BSP驅動+內核+組件組成(如上圖)。內核包含多任務調度、內存管理、任務間通信的功能,組件包含網絡協議、外設支持等。

FreeRTOS內核是可剪裁的,組件也是可選的。由於嵌入式應用往往對內存空間的要求十分苛刻,所以一個可剪裁的RTOS對於嵌入式應用非常重要。這使得FreeRTOS的核心代碼只有9000行左右。

FreeRTOS 特性

  • 靈活的任務優先級
  • 靈活輕量級的任務通知機制
  • 隊列
  • 二值/計數信號量
  • 互斥/遞歸互斥量
  • 軟定時器
  • 事件組
  • 定時/空閒Hook函數
  • 棧溢出檢查
  • 跟蹤記錄
  • 任務時間統計

FreeRTOS 文件

FreeRTOS核心組件主要有三個文件:list.c,queue.c,tasks.c是必須添加的;可擴展的部分:stream_buffer.c, croutine.c, event_group.c這幾個功能用不着可以不加。

下圖是FreeRTOS-Kernel的根目錄
在這裏插入圖片描述

  • queue.c 隊列
  • timers.c 軟定時器
  • event_group.c 事件組
  • croutine.c 協程,協程大多應用在資源很有限的MCU上,目前已經很少使用了

下圖是FreeRTOS的根目錄
在這裏插入圖片描述
需要注意的是,這兩個根目錄是不一樣的。FreeRTOS的內核文件是在FreeRTOS-Kernel的目錄下的。\FreeRTOS\Demo目錄下是不同芯片的Demo(如下圖)
在這裏插入圖片描述
一個完整的工程除了需要.c文件之外,還需要引用頭文件
頭文件‘task.h’, ‘queue.h’, ‘semphr.h’, ‘timers.h’ ,‘event_groups.h’ 等

另外還需要添加頭文件等包含路徑
示例:
**

FreeRTOS/Source/include. // 頭文件
FreeRTOS/Source/portable/[compiler]/[architecture]. //其他接口
FreeRTOSConfig.h // 配置文件

**
FreeRTOS/Source/portable/[compiler]/[architecture]. 這個路徑下可以包含Heap Memory allocation文件,具體請參考官方說明文檔

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