• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

21.4-系統(tǒng)配置 Config宏-內(nèi)核配置 FreeRTOS 項(xiàng)目

02/10 08:59
1538
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

聯(lián)系方式.txt

共1個(gè)文件

這個(gè)是全網(wǎng)最詳細(xì)最多功能的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里


STM32智能小車V3-STM32入門教程-openmv與STM32循跡小車-stm32f103c8t6-電賽 嵌入式學(xué)習(xí) PID控制算法 編碼器電機(jī) 跟隨

V3:HAL庫(kù)開發(fā)、手把手教學(xué)下面功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、openmv視覺控制、電磁循跡、FreeRTOS、K210視覺智能車(更新中)、K230視覺智能車(更新中)、MSPM0G3507視覺智能車(更新中)

在這里插入圖片描述

21.4-系統(tǒng)配置(不需要都懂 有印象 會(huì)查閱用就行)

系統(tǒng)配置說(shuō)明

大部分配置選項(xiàng)在FreeRTOS.h文件中都有默認(rèn)的配置,在應(yīng)用時(shí),把需要的配置選項(xiàng)放在FreeRTOSConfig.h文件即可。

在配置這些選擇時(shí)候,盡量不要在FreeRTOSConfig.h或者FreeRTOS.h直接修改,建議在STM32CubeMX軟件中設(shè)置然后在更新過(guò)去即可。

前綴為"config"的宏表示某種參數(shù)設(shè)置,一般的,值為1表示開啟此功能,值為0表示禁用此功能。

前綴為"INCLUDE_"的宏表示是否編譯某個(gè)函數(shù)的源碼。

文件FreeRTOS.h包含系統(tǒng)默認(rèn)的一些參數(shù)的宏定義,不要直接修改此文件的內(nèi)容,用戶可以通過(guò)修改的配置文件是FreeRTOSConfig.h,這個(gè)文件中包含大量前綴為"config"和"INCLUDE_"的宏定義。

Config宏-內(nèi)核配置

在STM32CubeMX的配置會(huì)更新到FreeRTOSConfig.h文件中
在這里插入圖片描述
1、configUSE_PREEMPTION

使用說(shuō)明:于控制任務(wù)調(diào)度的方式,一般配置-1

配置為 1 -使能搶占式調(diào)度器

配置為 0-使能合作式調(diào)度器

2、configUSE_PORT_OPTIMISED_TASK_SELECTION

使用說(shuō)明:STM32配置為1就可以了

功能: 此配置用于優(yōu)化優(yōu)先級(jí)列表中要執(zhí)行的最高優(yōu)先級(jí)任務(wù)的算法。對(duì) CM 內(nèi)核的移植文件,默認(rèn)已經(jīng)在文件 portmacro.h 文件中使能。

配置為 0-通用方式

  • 所有平臺(tái)的移植文件都可以配置為 0,因?yàn)檫@是通用方式。
  • 純 C 編寫,比專用方式效率低。
  • 可用的優(yōu)先級(jí)數(shù)量不限制。

配置為 1-專用方式

  • 部分平臺(tái)支持。
  • 這些平臺(tái)架構(gòu)有專用的匯編指令,比如 CLZ(Count Leading Zeros)指令,通過(guò)這些指令可以加快算法執(zhí)行速度。
  • 比通用方式高效。
  • 有最大優(yōu)先級(jí)數(shù)限制,通常限制為 32 個(gè)

3、configUSE_TICKLESS_IDLE

使用說(shuō)明:配置為0

配置為 1-使能 tickless 低功耗模式

配置為 0-禁能 tickless 低功耗模式

4、configCPU_CLOCK_HZ

使用說(shuō)明:和單片機(jī)主頻一樣就行、一般STM32CubeMX已經(jīng)給生成

此參數(shù)用于定義 CPU 的主頻,單位 Hz

5、configTICK_RATE_HZ

使用說(shuō)明:一般1Khz

此參數(shù)用于定義系統(tǒng)時(shí)鐘節(jié)拍數(shù),單位 Hz,一般取 1000Hz 即可。

比如1000HZ,就是系統(tǒng)會(huì)每1ms 進(jìn)行一次任務(wù)調(diào)度

這個(gè)參數(shù)了影響了系統(tǒng)的實(shí)時(shí)性

6、configMAX_PRIORITIES

此參數(shù)用于定義可供用戶使用的最大任務(wù)優(yōu)先級(jí)數(shù),

  • 如果這個(gè)定義的是 5,那么用戶可以使用的優(yōu)先級(jí)號(hào)是 0,1,2,3,4,不包含 5。
  • 優(yōu)先級(jí)號(hào)越小,優(yōu)先級(jí)就約低。
  • 如果configUSE_PORT_OPTIMISED_TASK_SELECTION配置為1、configMAX_PRIORITIES就不能超過(guò)32
  • 一般設(shè)置5-7左右就夠使用
  • 在這里插入圖片描述
    7、configMINIMAL_STACK_SIZE

使用說(shuō)明:一般為128
此參數(shù)用于定義空閑任務(wù)的??臻g大小,單位字,即 4 字節(jié)。

8、configTOTAL_HEAP_SIZE

(FreeRTOS堆中可用的RAM總量)定義freeRTOS系統(tǒng)堆大小。

configTOTAL_HEAP_SIZE 設(shè)置了 FreeRTOS從芯片的SRAM分配的堆內(nèi)存的總大小,這個(gè)堆內(nèi)存用于FreeRTOS所有動(dòng)態(tài)內(nèi)存分配,具體將用于FreeRTOS的任務(wù)棧的分配,隊(duì)列、信號(hào)量等資源,內(nèi)存池或動(dòng)態(tài)內(nèi)存分配。
在這里插入圖片描述
FreeRTOS 提供了 xPortGetFreeHeapSize() 函數(shù)來(lái)監(jiān)控當(dāng)前堆內(nèi)存的剩余空間。你可以在程序中定期調(diào)用該函數(shù),查看堆內(nèi)存的使用情況,以確保內(nèi)存不會(huì)耗盡。

size_t heapRemaining = xPortGetFreeHeapSize();

9、configMAX_TASK_NAME_LEN

如果自己的任務(wù)名16字符數(shù)一下,就不需要更改

定義任務(wù)名最大的字符數(shù),末尾的結(jié)束符 '?’也要計(jì)算在內(nèi)。

10、configUSE_16_BIT_TICKS

32位單片機(jī)配置0

16位單片機(jī)配置1

系統(tǒng)時(shí)鐘節(jié)拍計(jì)數(shù)使用 TickType_t 數(shù)據(jù)類型定義的。

配置為1-TickType_t 定義是 16 位無(wú)符號(hào)數(shù)

配置為0-TickType_t 是32位

11、configIDLE_SHOULD_YIELD

一般配置為0

此參數(shù)用于使能與空閑任務(wù)同優(yōu)先級(jí)的任務(wù),只有滿足以下兩個(gè)條件時(shí),此參數(shù)才有效果:

  • 使能搶占式調(diào)度器。
  • 有創(chuàng)建與空閑任務(wù)同優(yōu)先級(jí)的任務(wù)。

12、configUSE_TASK_NOTIFICATIONS

配置為 1-使能任務(wù)間直接的消息傳遞,包含信號(hào)量,事件標(biāo)志組和消息郵箱。

配置為 0-禁能此特性。

13、configUSE_MUTEXES

配置為 1-使能互斥信號(hào)量

配置為 0-禁能互斥信號(hào)量

14、configUSE_RECURSIVE_MUTEXES

配置為 1-使能遞歸互斥信號(hào)量

配置為 0-禁能遞歸互斥信號(hào)量

15、configUSE_COUNTING_SEMAPHORES

配置為 1-使能計(jì)數(shù)信號(hào)量

配置為 0-禁能計(jì)數(shù)信號(hào)量

16、configQUEUE_REGISTRY_SIZE

通過(guò)此定義來(lái)設(shè)置可以注冊(cè)的信號(hào)量和消息隊(duì)列個(gè)數(shù)。隊(duì)列注冊(cè)有兩個(gè)目的,這兩個(gè)目的都與內(nèi)核調(diào)試有關(guān):

  • 注冊(cè)隊(duì)列的時(shí)候,可以給隊(duì)列起一個(gè)名字,當(dāng)使用調(diào)試組件的時(shí)候,通過(guò)名字可以很容易的區(qū)分不同隊(duì)列
  • 通過(guò)隊(duì)列的相關(guān)信息,調(diào)試器可以很容易定位隊(duì)列和信號(hào)量,能夠定位信號(hào)量是因?yàn)?FreeRTOS 信號(hào)量也是基于隊(duì)列實(shí)現(xiàn)的。當(dāng)然,如果用戶沒(méi)有使用內(nèi)核方面的調(diào)試器,這個(gè)宏定義是沒(méi)有意義的。

17、configUSE_QUEUE_SETS

配置為 1-使能消息隊(duì)列。

配置為 0-禁能消息隊(duì)列。

18、configUSE_TIME_SLICING

使用:默認(rèn)使能 配置1

配置為 1-使能時(shí)間片調(diào)度。

配置為 0-禁能時(shí)間片調(diào)度。

作用:用于在一個(gè)優(yōu)先級(jí)有多個(gè)任務(wù),就會(huì)每1ms 調(diào)度一次

用戶沒(méi)有配置此選項(xiàng)如果用戶沒(méi)有配置此選項(xiàng)

默認(rèn)在 FreeRTOS.h 文件中已經(jīng)配置為 1,即使能時(shí)間片調(diào)度。

Confi開始的其他宏-其他配置

圖片是樣例 不是按照?qǐng)D片設(shè)置的意思
在這里插入圖片描述
鉤子函數(shù)配置:1、2、3、4

鉤子函數(shù)的主要功能是用于函數(shù)的擴(kuò)展,用戶可以根據(jù)自己的需要往里面添加相關(guān)的測(cè)試函數(shù)。就不會(huì)在用更改源碼,就像回調(diào)函數(shù)一樣。

1、configUSE_IDLE_HOOK

配置為 1-使能空閑任務(wù)的鉤子函數(shù)

配置為 0-禁能空閑任務(wù)鉤子函數(shù)

2、configUSE_MALLOC_FAILED_HOOK

配置為 1-使能動(dòng)態(tài)內(nèi)存申請(qǐng)失敗時(shí)的鉤子函數(shù)

配置為 0-禁能動(dòng)態(tài)內(nèi)存申請(qǐng)失敗時(shí)的鉤子函數(shù)

當(dāng)創(chuàng)建任務(wù),信號(hào)量或者消息隊(duì)列時(shí),F(xiàn)reeRTOS 通過(guò)函數(shù) pvPortMalloc()申請(qǐng)動(dòng)態(tài)內(nèi)存。

3、configUSE_TICK_HOOK

配置為 1-使能滴答定時(shí)器中斷里面執(zhí)行的鉤子函數(shù)

配置為 0-禁能滴答定時(shí)器中斷里面執(zhí)行的鉤子函數(shù)

4、configCHECK_FOR_STACK_OVERFLOW

配置為 2-使用一種方法檢測(cè)棧溢出。

配置為 1-使用另一種方法檢測(cè)棧溢出。

配置為 0-禁止棧溢出檢測(cè)。

任務(wù)運(yùn)行信息獲取配置:5、6、7、

5、configGENERATE_RUN_TIME_STATS

配置為 1-使能任務(wù)運(yùn)行狀態(tài)參數(shù)統(tǒng)計(jì)。

配置為 0-禁止此特性。

6、configUSE_TRACE_FACILITY

配置為 1-使能此配置將添加額外的結(jié)構(gòu)體成員和函數(shù),以此來(lái)協(xié)助可視化和跟蹤。

配置為 0-禁能此特性。

7、configUSE_STATS_FORMATTING_FUNCTIONS

用戶配置宏定義 configUSE_TRACE_FACILITY 和 configUSE_STATS_FORMATTING_FUNCTIONS都為 1 的時(shí)候,將使能函數(shù) vTaskList() 和 vTaskGetRunTimeStats(),如果兩者中任何一個(gè)為 0,那么這兩個(gè)函數(shù)都將被禁能。

(不用使用)合作式任務(wù)配置:8、9

8、configUSE_CO_ROUTINES

配置為 1-使能合作式調(diào)度相關(guān)函數(shù)。

配置為 0-禁能合作式調(diào)度相關(guān)函數(shù)。

9、configMAX_CO_ROUTINE_PRIORITIES

此參數(shù)用于定義可供用戶使用的最大的合作式任務(wù)優(yōu)先級(jí)數(shù),如果這個(gè)定義的是 5,那么用戶可以使用的優(yōu)先級(jí)號(hào)是 0,1,2,3,4,不包含 5,對(duì)于這一點(diǎn),初學(xué)者要特別的注意。

軟件定時(shí)器配置:10、11、

10、configUSE_TIMERS

配置為 1-使能軟件定時(shí)器。

配置為 0-0禁能軟件定時(shí)器。

11、configTIMER_TASK_PRIORITY

配置軟件定時(shí)器任務(wù)的優(yōu)先級(jí)。

12、configTIMER_QUEUE_LENGTH

配置軟件定時(shí)器命令隊(duì)列的長(zhǎng)度。

13、configTIMER_TASK_STACK_DEPTH

配置軟件定時(shí)器任務(wù)的??臻g大小

斷言配置:

會(huì)判斷函數(shù)輸入實(shí)參是否滿足要求,方便調(diào)試代碼

STM32cubeMX生成的:
在這里插入圖片描述
中斷配置:

configLIBRARY_LOWEST_INTERRUPT_PRIORITY:

通常15

配置中斷最低優(yōu)先級(jí),通常為15(因?yàn)镾TM32的搶占式優(yōu)先級(jí)最多設(shè)置為4bit,優(yōu)先級(jí)最低只能設(shè)置為15),此參數(shù)用于配置SysTick(滴答中斷)與PendSV(掛起中斷)。

configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY:

配置系統(tǒng)可管理的最高優(yōu)先級(jí),此參數(shù)用于配置BASEPRI寄存器。 如果設(shè)置為5,則優(yōu)先級(jí)數(shù)值為0,1,2,3,4的中斷是不受FreeRTOS管理的,不可被屏蔽,也不能調(diào)用FreeRTOS中的API接口函數(shù),而中斷優(yōu)先級(jí)在5-15的中斷受系統(tǒng)FreeRTOS管理,可以被屏蔽.(用于臨界保護(hù)、防止其他中斷打斷重要程序)

“INCLUDE_”開始的宏

以“INCLUDE”開頭的宏允許您的應(yīng)用程序將未使用的實(shí)時(shí)內(nèi)核組件從您的工程中移除(主要通過(guò)C語(yǔ)言預(yù)編譯溢出的), 這可節(jié)約嵌入式應(yīng)用程序所需的任何 ROM 或 RAM。

每個(gè)宏都采用以下形式:

INCLUDE_FunctionName

其中 FunctionName 表示可以選擇性地排除的 API 函數(shù)(或函數(shù)集)。

要包含 API 函數(shù),請(qǐng)將宏設(shè)置為 1,要排除該函數(shù),請(qǐng)將宏設(shè)置為 0。

例如:

要包含 vTaskDelete() API 函數(shù),請(qǐng)使用:

#define INCLUDE_vTaskDelete 1

要從構(gòu)建中排除 vTaskDelete(),請(qǐng)使用:

#define INCLUDE_vTaskDelete 0
在這里插入圖片描述
在這里插入圖片描述

 

  • 聯(lián)系方式.txt
    下載

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時(shí)響應(yīng)!