FreeRTOS 教程指南 学习笔记 第一章 简介
FreeRTOS 教程指南 學習筆記 第一章 簡介
?
本章包含的內容有:
一、了解FreeRTOS
FreeRTOS可以使用大約20種不同的編譯器來構建,并且可以在30多種不同的處理器架構上運行。每個受支持的編譯器和處理器的組合都被認為是一個單獨的FreeRTOS分支。FreeRTOS可以被認為是一個能為裸代碼程序提供多任務功能的庫文件。
二、了解FreeRTOS版本
FreeRTOSConfig.h頭文件是FreeRTOS的主要配置文件,由于FreeRTOSConfig.h包含特定于應用程序的定義,因此它應該位于正在構建的應用程序的一部分的目錄中,而不是位于包含FreeRTOS源代碼的目錄中。
FreeRTOS的目錄結構
FreeRTOS
│ │
│ ├─Source 系統內核源文件
│ │
│ └─Demo 各分支的實例代碼
│
FreeRTOS-Plus
│
├─Source 第三方庫的源文件,如TCP/IP,JASON等
│
└─Demo 實例代碼
FreeRTOS內核總,最核心的兩個文件是task.c和list.c文件,只有這兩個文件是必須的。他們被放在FreeRTOS/Source文件夾下,在相同文件夾下還有:
│
└─Source
│
├─tasks.c FreeRTOS source file - always required
├─list.c FreeRTOS source file - always required
├─queue.c 使系統支持隊列和信號量 - nearly always required
├─timers.c 使系統支持軟計時器 - optional
├─event_groups.c 使系統支持事件組等 - optional
└─croutine.c 使系統支持協程 - optional
對于分支的支持:如果您在使用編譯器“編譯器”的具有架構“架構”的處理器上運行FreeRTOS,那么除了核心的FreeRTOS源文件外,您還必須構建位于FreeRTOS/Source/portable/[compiler]/[architecture]目錄中的文件
正如將在第2章,堆內存管理中描述的,FreeRTOS還將堆內存分配視為可移植層的一部分。使用早于V9.0.0的FreeRTOS版本的項目必須包含一個堆內存管理器。在FreeRTOS V9.0.0中,只有當configSUPPORT_DYNAMIC_ALLOCATION在FreeRTOSConfig.h中設置為1,或者當configSUPPORT_DYNAMIC_ALLOCATION未定義時,才需要堆內存管理器。FreeRTOS提供了5個堆分配方案示例。這五種方案分別命名為heap_1到heap_5,并分別由源文件heap_1.c到heap_5.c實現。堆分配方案包含在FreeRTOS/Source/portable/MemMang目錄中。如果您已將FreeRTOS配置為使用動態內存分配,那么就必須在項目編譯中包含這五個源文件中的一個,除非您的應用程序提供了一個替代實現。
FreeRTOS要求在編譯器的包含路徑中包含三個目錄。他們是:
三、示例程序
int main( void ) {/* Perform any hardware setup necessary. */prvSetupHardware();/* --- APPLICATION TASKS CAN BE CREATED HERE --- */vUserTask1();vUserTask2(); vUserTask3();/* Start the created tasks running. */vTaskStartScheduler();/* Execution will only reach here if there was insufficient heap to start the scheduler. */for( ;; );return 0; }四、從頭開始創建項目
建議從現有的演示項目中創建新的項目。如果不需要這樣做,則可以使用以下過程創建一個新項目:
FreeRTOS/Source/include
FreeRTOS/Source/portable/[compiler]/[architecture]
包含FreeRTOSConfig.h文件的目錄
| tasks.c | FreeRTOS/Source |
| queue.c | FreeRTOS/Source |
| list.c | FreeRTOS/Source |
| timers.c | FreeRTOS/Source |
| event_groups.c | FreeRTOS/Source |
| event_groups.c | FreeRTOS/Source |
| All C and assembler files | FreeRTOS/Source/portable/[compiler]/[architecture] |
| heap_n.c(n是1~5) | FreeRTOS/Source/portable/MemMang |
五、數據類型和代碼規范
數據類型:
FreeRTOS的每個分支都有一個唯一的portmacro.h頭文件,該文件包含兩種端口特定數據類型的定義:TickType_t和BaseType_t。
TickType_t :FreeRTOS配置了一個被稱為tick interrupt的周期性中斷。自FreeRTOS應用程序啟動以來發生的tick interrupt總數數稱為tick count。兩次tick interrupt之間的時間稱為tick period。TickType_t 用于保存周期性中斷的tick count,并確定時間的數據類型。
TickType_t可以是unsigned 16-bit ,也可以是unsigned 32-bit ,這取決于在FreeRTOSConfig.h中對configUSE_16_BIT_TICKS的設置。如果configUSE_16_BIT_TICKS被設置為1,則TickType_t被定義為uint16_t。如果configUSE_16_BIT_TICKS被設置為0,則TickType_t被定義為uint32_t。
使用uint16_t類型可以極大地提高8位和16位處理器的效率,但嚴重限制了可以指定的最大塊周期。沒有理由在32位處理器上使用uint16_t。
BaseType_t :總是被定義為處理器中最有效的數據類型。通常,這是在32位處理器上的32位類型,在16位體系結構上的16位類型,以及在8位體系結構上的8位類型。BaseType_t通常用于只能取非常有限的值范圍的返回類型,以及pdTRUE/pdFALSE類型的布爾類值。
一些編譯器把所有所有不合格的字符變量列為無符號,而另一些則使它們列為有符號。出于這個原因,FreeRTOS源代碼顯式地限定了“有符號”或“無符號”的字符使用,除非字符用于保存ASCII字符,或者指向char的指針用于指向字符串。
變量命名規范:
所有變量命名都有前綴如:
‘c’ for char, ‘s’ for int16_t (short), ‘l’ int32_t (long), and ‘x’ for BaseType_t和其他非標準類型 (structures, task handles, queue handles, etc.)
如果一個變量為無符號,則它也以“u”作為前綴。如果變量是指針,它也以“p”作為前綴。例如,類型為uint8_t的變量將以“uc”為前綴,類型為字符指針的變量將以“pc”為前綴。
函數命名規范:
函數命名的前綴包含了返回類型和它定義在哪里,如:
vTaskPrioritySet() 返回void定義在task.c中。
xQueueReceive() 返回BaseType_t定義在queue.c中。
pvTimerGetTimerID() 返回一個pointer to void定義在timers.c中。
文件范圍(private)函數以“prv”為前綴。
宏命名:
大多數宏都是用大寫寫的,并用小寫字母作為前綴,表示宏的位置。表3提供了一個前綴的列表。
| port (for example, portMAX_DELAY) | Location of macro definition |
| 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 |
請注意,信號量API幾乎完全是作為一組宏編寫的,但它遵循函數命名約定,而不是宏命名約定。
表4中定義的宏在整個FreeRTOS源代碼中都在使用
| pdTRUE | 1 |
| pdFALSE | 0 |
| pdPASS | 1 |
| pdFAIL | 0 |
總結
以上是生活随笔為你收集整理的FreeRTOS 教程指南 学习笔记 第一章 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux vi替换字符串
- 下一篇: oracle的创建视图,oracle 创