個人不是很喜歡FreeRTOS的編程風格,但是沒辦法,白嫖人家的東西,只能忍了,這裏先簡單總結一下;
相關文章
【FreeRTOS實戰彙總】小白博主的RTOS學習實戰快速進階之路(持續更新)
1 源碼結構
下載或者克隆源碼,可以看到頂層的源碼結構如下圖所示;
FreeRTOS
:實時系統的源文件,主要是這部分;FreeRTOS-Plus
:這裏主要基於FreeRTOS的demo,比如iot-lib,tcp等等;
下面重點看一下FreeRTOS
,具體如下所示;
- ① portable:是一個文件夾,裏面包括了各個平臺移植所需要的文件;
- ② MenMang:內存管理的文件,基本包括
heap_1.c
,heap_2.c
,heap_3.c
,heap_4.c
,heap_5.c
,以後再深入瞭解;
下面是幾個比較核心的文件,前面有簡單提到過,簡單介紹如下:
- list.c
基本的數據結構,雙鏈表的實現,是很多函數的底層文件, 使用FreeRTOS
必須要包含的文件; - tasks.c
任務塊,任務調度,創建,刪除等等接口都在這個文件中,也是必須要包含的文件; - queue.c
這個文件同時提供消息隊列和信號量服務,作爲任務間同步基本離不開它,所以這個文件幾乎也是必須包含的; - timers.c
這個文件提供軟件計時器功能。如果需要實際使用軟件計時器的功能,則應該將它包括到構建工程中; - event_groups.c
這個文件提供了事件組功能。如果需要事件組,則需要將它包含到工程中; - croutine.c
這個文件實現FreeRTOS
協同例程功能,協同例程用於非常小的微控制器,現在很少使用,看情況添加;
具體如下所示;
- FreeRTOSConfig.h
這個文件可以有用戶創建,當然在源碼的demo
路徑下可以找到現成的文件,根據自己需求配置FreeRTOSConfig.h
的宏定義,從而實現對FreeRTOS
的剪裁。
2 數據類型
FreeRTOS
的數據類型基本上都定義在portmacro.h
文件中,比如在FreeRTOS\Source\portable\RVDS\ARM_CM3
下就可以找到這個文件;除此之外,FreeRTOS
中還有兩個特定的數據類型;
- BaseType_t
這個類型被定義爲架構中最有效的數據類型;比如32位體系結構使用32 bit
數據類型/int32_t
,16位架構使用16 bit
數據類型/int16_t
,8位架構上使用8 bit
數據類型/int8_t
。
BaseType_t 適用於數據範圍比它小的類型的值,所以也適用於pdTRUE
/pdFALSE
類型的布爾值; - TickType_t
FreeRTOS
配置一個稱爲tick interrupt
的定時中斷;兩次滴答中斷之間的時間稱爲滴答中斷週期;所以tick number
是指定滴答中斷週期的倍數,TickType_t
是用來保存滴答計數值和to的數據類型指定時間。
在32位機上數據類型定義如下所示,和具體的平臺相關;
3 命名規則
3.1 常見命名規則
-
匈牙利命名法:廣泛應用於Microsoft Windows這類環境中;
-
駝峯命名法:近年來越來越流行。
駝峯命名法,正如它的名稱所表示的那樣,指的是混合使用大小寫字母來構成標識符的名字。其中第一個單詞首字母小寫,餘下的單詞首字母大寫。
例如:
printEmployeePaychecks();
函數名中每一個邏輯斷點都有一個大寫字母來標記。 -
帕斯卡(Pascal)命名法:與駝峯命名法類似。
只不過駝峯命名法是第一個單詞首字母小寫,而帕斯卡命名法則是第一個單詞首字母大寫。因此這種命名法也有人稱之爲“大駝峯命名法”。
例如:
DisplayInfo();
UserName
都是採用了帕斯卡命名法。在C#中,以帕斯卡命名法和駱駝命名法居多。事實上,很多程序設計者在實際命名時會將駝峯命名法和帕斯卡結合使用,例如變量名採用駝峯命名法,而函數採用帕斯卡命名法。 -
下劃線命名法:
下劃線法是隨着C語言的出現流行起來的,在UNIX/LIUNX
這樣的環境,以及GNU
代碼中使用非常普遍。1
3.2 FreeRTOS的規則
- 變量名
前綴c
:char
;
前綴s
:int16_t
;
前綴p
:指針變量;
大寫l
:int32_t
;
小寫x
:表示類型爲BaseType_t
:其他非標準類型(結構、任務句柄、隊列句柄等等);
如果一個變量是無符號的,那麼它也以“u”爲前綴。如果一個變量是一個指針,它也是帶前綴的,例如,類型爲uint8_t的變量將前綴爲
uc
- 函數名
FreeRTOS
函數名的前綴表示它們返回的類型,也包括它們在其中定義的文件;vTaskPrioritySet()
:前綴v
表示返回類型爲viod
,Task
表示在tasks.c
中定義;xQueueReceive()
:前綴x
表示返回BaseType_t
類型數據,Queue
表示該函數在queue.c
中定義;pvTimerGetTimerID()
:前綴pv
表示返回void類型指針,Timer
表示該函數在timer.c.
中定義;prv
:前綴prv
表示作用範圍爲當前的文件;
- 宏定義
FreeRTOS
的大多數宏都是用大寫字母寫的,並以小寫字母作爲前綴來表示
定義了宏,如下所示;
前綴 | 定義的位置 |
---|---|
task (for example, taskENTER_CRITICAL() ) |
task.h |
pd (for example, pdTRUE ) |
projdefs.h |
config (for example, configUSE_PREEMPTION ) |
FreeRTOSConfig.h |
err (for example, errQUEUE_FULL ) |
projdefs.h |
port (for example, portMAX_DELAY ) |
portable.h or portmacro.h |
4 總結
本文總結了FreeRTOS源碼結構和數據類型,爲以後移植系統和源碼閱讀打下一丟丟基礎。
駝峯命名法-百度百科 ↩︎