电竞比分网-中国电竞赛事及体育赛事平台

分享

FreeRTOS之FreeRTOSConfig.h文件解析

 奔跑的瓦力 2019-01-28

背景:

FreeRTOSConfig.h文件是FreeRTOS的關(guān)鍵配置文件,需要搞懂里面參數(shù)的設(shè)置,下面分析各參數(shù)的含義。

內(nèi)容:

宏定義命名的前面小寫(xiě)config表明該定義是在config文件,名字后面部分均大寫(xiě),表明宏定義的含義。
#define configUSE_PREEMPTION                     1 //1是使用搶占式內(nèi)核,0是使用協(xié)程式內(nèi)核
#define configUSE_TIME_SLICING1 //1是使能時(shí)間片調(diào)度,默認(rèn)使能
#define configSUPPORT_STATIC_ALLOCATION          0 //靜態(tài)內(nèi)存分配申請(qǐng),0是不支持
#define configSUPPORT_DYNAMIC_ALLOCATION         1//動(dòng)態(tài)內(nèi)存分配申請(qǐng),1是支持
#define configUSE_IDLE_HOOK                      0//空閑鉤子,0是不使用
#define configUSE_TICK_HOOK                      0//時(shí)間鉤子,0是不使用
#define configCPU_CLOCK_HZ                       ( SystemCoreClock )//CPU時(shí)鐘頻率
#define configTICK_RATE_HZ                       ((TickType_t)1000)//時(shí)鐘節(jié)拍頻率,設(shè)置1000,周期就是1ms,更高的Tick Rate 會(huì)導(dǎo)致任務(wù)的時(shí)間片“time slice”變短
#define configMAX_PRIORITIES                     ( 7 )//最大優(yōu)先級(jí),用多少設(shè)置為多少,FreeRTOS 會(huì)為每個(gè)優(yōu)先級(jí)建立一個(gè)鏈表,因此每多一個(gè)優(yōu)先級(jí)都會(huì)增加些RAM 的開(kāi)銷(xiāo)。
#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)//空閑任務(wù)的堆棧大小
#define configTOTAL_HEAP_SIZE                    ((size_t)30720)//總的堆棧大小30k
#define configMAX_TASK_NAME_LEN                  ( 16 )//任務(wù)名字的最大長(zhǎng)度
#define configUSE_16_BIT_TICKS                   0
//將 configUSE_16_BIT_TICKS設(shè)為 1后portTickType將被定義為無(wú)符號(hào)的16位整形類(lèi)型,
configUSE_16_BIT_TICKS 設(shè)為0 后portTickType則被定義為無(wú)符號(hào)的32位整型。

#define configUSE_MUTEXES                        1//使用互斥量代碼
#define configQUEUE_REGISTRY_SIZE                8//不為0表示啟用列隊(duì)記錄,不用設(shè)為0,節(jié)省RAM空間
#define configUSE_PORT_OPTIMISED_TASK_SELECTION  1//1是啟用特殊方法來(lái)選擇下一個(gè)要運(yùn)行的任務(wù)
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES                    0 // 0不啟用協(xié)程代碼
#define configMAX_CO_ROUTINE_PRIORITIES          ( 2 )//協(xié)程優(yōu)先級(jí)數(shù)目
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
//可選函數(shù)配置,用設(shè)為1,不用設(shè)為0
#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_xTaskGetSchedulerState      1
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY   15 //中斷的最低優(yōu)先級(jí)
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5//系統(tǒng)可管理的中斷最高優(yōu)先級(jí)
另外,補(bǔ)充下portmacro.h文件中的一些宏定義;
/* Type definitions. */
#define portCHAR char
#define portFLOAT float
#define portDOUBLE double
#define portLONG long
#define portSHORT short
#define portSTACK_TYPE uint32_t
#define portBASE_TYPE long
typedef portSTACK_TYPE StackType_t;//uint32_t
typedef long BaseType_t;
typedef unsigned long UBaseType_t;
#if( configUSE_16_BIT_TICKS == 1 )
typedef uint16_t TickType_t;
#define portMAX_DELAY ( TickType_t ) 0xffff //16位最大延遲數(shù)
#else
typedef uint32_t TickType_t;
#define portMAX_DELAY ( TickType_t ) 0xffffffffUL //32 位最大延遲數(shù)
/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do
not need to be guarded with a critical section. */
#define portTICK_TYPE_IS_ATOMIC 1
#endif
/*-----------------------------------------------------------*/
/* Architecture specifics. */
#define portSTACK_GROWTH ( -1 ) // 堆棧生長(zhǎng)方向,-1為向下生長(zhǎng)
#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
//

portTICK_RATE_MS表示的是Tick 間間隔多少ms,只在應(yīng)用代碼中可能會(huì)用到。如使用vTaskDelay延時(shí)函數(shù)可實(shí)現(xiàn)任務(wù)定時(shí)間間隔地執(zhí)行,調(diào)用方法如下:要延時(shí)250,調(diào)用  vTaskDelay( 250 /portTICK_RATE_MS );

#define portBYTE_ALIGNMENT 8//這個(gè)常量指示字節(jié)對(duì)齊數(shù),其默認(rèn)值為8,即默認(rèn)以8個(gè)字節(jié)進(jìn)行內(nèi)存對(duì)齊



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多