FreeRTOS移植需要做的主要工作

不惑而已發表於2024-08-16

1.需要加入自己工程的檔案和資料夾

在官方下載的原始碼包中,把這些檔案加到自己的工程即可。

刪掉portable中其它與自己晶片無關的資料夾

2.中斷函式的處理
刪除本地中斷檔案中的中斷處理函式。將FreeRTOS中的三個中斷處理函式作一下宣告

3.FreeRTOS需要配置
結合原子哥的教程,修改自己的配置檔案:FreeRTOSConfig.h

                                    FreeRTOS基礎配置配置選項                                              

define configUSE_PREEMPTION 1 1使用搶佔式核心,0使用協程
define configUSE_TIME_SLICING 1 使能時間片排程(預設式使能的)
define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 1啟用特殊方法來選擇下一個要執行的任務
一般是硬體計算前導零指令,如果所使用的
MCU沒有這些硬體指令的話此宏應該設定為0!
define configUSE_TICKLESS_IDLE 0 1啟用低功耗tickless模式
define configUSE_QUEUE_SETS 1 為1時啟用佇列
define configCPU_CLOCK_HZ (SystemCoreClock) CPU頻率
define configTICK_RATE_HZ (1000) 時鐘節拍頻率,這裡設定為1000,週期就是1ms
define configMAX_PRIORITIES (32) 可使用的最大優先順序
define configMINIMAL_STACK_SIZE ((unsigned short)130) 空閒任務使用的堆疊大小
define configMAX_TASK_NAME_LEN (16) 任務名字字串長度

define configUSE_16_BIT_TICKS 0 系統節拍計數器變數資料型別,
1表示為16位無符號整形,0表示為32位無符號整形
define configIDLE_SHOULD_YIELD 1 為1時空閒任務放棄CPU使用權給其他同優先順序的使用者任務
define configUSE_TASK_NOTIFICATIONS 1 為1時開啟任務通知功能,預設開啟
define configUSE_MUTEXES 1 為1時使用互斥訊號量
define configQUEUE_REGISTRY_SIZE 8 不為0時表示啟用佇列記錄,具體的值是可以
記錄的佇列和訊號量最大數目。
define configCHECK_FOR_STACK_OVERFLOW 0 大於0時啟用堆疊溢位檢測功能,如果使用此功能
使用者必須提供一個棧溢位鉤子函式,如果使用的話
此值可以為1或者2,因為有兩種棧溢位檢測方法。
define configUSE_RECURSIVE_MUTEXES 1 為1時使用遞迴互斥訊號量
define configUSE_MALLOC_FAILED_HOOK 0 1使用記憶體申請失敗鉤子函式
define configUSE_APPLICATION_TASK_TAG 0
define configUSE_COUNTING_SEMAPHORES 1 為1時使用計數訊號量

                           FreeRTOS與記憶體申請有關配置選項                                                

define configSUPPORT_DYNAMIC_ALLOCATION 1 //支援動態記憶體申請
define configTOTAL_HEAP_SIZE ((size_t)(20*1024)) //系統所有總的堆大小

                           FreeRTOS與鉤子函式有關的配置選項                                              

define configUSE_IDLE_HOOK 0 //1,使用空閒鉤子;0,不使用
define configUSE_TICK_HOOK 0 //1,使用時間片鉤子;0,不使用

                           FreeRTOS與執行時間和任務狀態收集有關的配置選項                                 

define configGENERATE_RUN_TIME_STATS 0 //為1時啟用執行時間統計功能
define configUSE_TRACE_FACILITY 1 //為1啟用視覺化跟蹤除錯
define configUSE_STATS_FORMATTING_FUNCTIONS 1 //與宏configUSE_TRACE_FACILITY同時為1時會編譯下面3個函式
//prvWriteNameToBuffer(),vTaskList(),
//vTaskGetRunTimeStats()

                           FreeRTOS與協程有關的配置選項                                                  

define configUSE_CO_ROUTINES 0 //為1時啟用協程,啟用協程以後必須新增檔案croutine.c
define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) //協程的有效優先順序數目

                          FreeRTOS與軟體定時器有關的配置選項                                            

define configUSE_TIMERS 1 //為1時啟用軟體定時器
define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1) //軟體定時器優先順序
define configTIMER_QUEUE_LENGTH 5 //軟體定時器佇列長度
define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) //軟體定時器任務堆疊大小

                           FreeRTOS可選函式配置選項                                                      

define INCLUDE_xTaskGetSchedulerState 1
define INCLUDE_vTaskPrioritySet 1
define INCLUDE_uxTaskPriorityGet 1
define INCLUDE_vTaskDelete 1
define INCLUDE_vTaskCleanUpResources 1
define INCLUDE_vTaskSuspend 1
define INCLUDE_vTaskDelayUntil 1
define INCLUDE_vTaskDelay 1
define INCLUDE_eTaskGetState 1
define INCLUDE_xTimerPendFunctionCall 1

                           FreeRTOS與中斷有關的配置選項                                                  

ifdef __NVIC_PRIO_BITS
define configPRIO_BITS __NVIC_PRIO_BITS
else
define configPRIO_BITS 4
endif

define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中斷最低優先順序
define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //系統可管理的最高中斷優先順序
define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

                           FreeRTOS與中斷服務函式有關的配置選項                                          

define xPortPendSVHandler PendSV_Handler
define vPortSVCHandler SVC_Handler

相關文章