【FreeRTOS學習02】源碼結構/數據類型/命名規則總結

個人不是很喜歡FreeRTOS的編程風格,但是沒辦法,白嫖人家的東西,只能忍了,這裏先簡單總結一下;

相關文章

【FreeRTOS實戰彙總】小白博主的RTOS學習實戰快速進階之路(持續更新)

1 源碼結構

下載或者克隆源碼,可以看到頂層的源碼結構如下圖所示;


在這裏插入圖片描述

  • FreeRTOS:實時系統的源文件,主要是這部分;
  • FreeRTOS-Plus:這裏主要基於FreeRTOS的demo,比如iot-lib,tcp等等;

下面重點看一下FreeRTOS,具體如下所示;


在這裏插入圖片描述

  • ① portable:是一個文件夾,裏面包括了各個平臺移植所需要的文件;
  • ② MenMang:內存管理的文件,基本包括heap_1.cheap_2.cheap_3.cheap_4.cheap_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的規則

  • 變量名
    前綴cchar
    前綴sint16_t
    前綴p:指針變量;
    大寫lint32_t
    小寫x:表示類型爲BaseType_t:其他非標準類型(結構任務句柄隊列句柄等等);

如果一個變量是無符號的,那麼它也以“u”爲前綴。如果一個變量是一個指針,它也是帶前綴的,例如,類型爲uint8_t的變量將前綴爲uc

  • 函數名
    FreeRTOS函數名的前綴表示它們返回的類型,也包括它們在其中定義的文件;
    • vTaskPrioritySet():前綴v表示返回類型爲viodTask表示在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源碼結構和數據類型,爲以後移植系統和源碼閱讀打下一丟丟基礎。


  1. 駝峯命名法-百度百科 ↩︎

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