4. Explication détaillée du fichier de configuration du système FreeRTOS (FreeRTOSConfig.h)

Table des matières

1. Options de configuration de base

Deuxièmement, la définition de l'allocation de mémoire

3. Définitions pertinentes des fonctions de crochet

Quatrièmement, la définition des statistiques de temps d'exécution et d'état des tâches

Cinq, configuration liée à la minuterie logicielle

Rôle du fichier de configuration FreeRTOSConfig.h :

Coordination des fonctions et personnalisation de FreeRTOS, et activation des fonctions API

Pour FreeRTOS, les fichiers de configuration sont principalement divisés en trois catégories :

1. "INCLUDE": principalement utilisé pour configurer les fonctions API facultatives dans FreeRTOS

2. « config » : terminer la configuration de la fonction et la personnalisation de FreeRTOS

3. Autres options de configuration : définition de macro PendSV, définition de macro SVC

1. Options de configuration de base

(1) Configuration définie par la macro configUSE_PREEMPTION

#define configUSE_PREEMPTION                            1                      
 /* 1: 抢占式调度器, 0: 协程式调度器, 无默认需定义 */

(2) Configuration définie par la macro configUSE_PORT_OPTIMISED_TASK_SELECTION

#define configUSE_PORT_OPTIMISED_TASK_SELECTION         1                      
 /* 1: 使用硬件计算下一个要运行的任务(硬件),
 0: 使用软件算法计算下一个要运行的任务(通用的方式)-效率较低, 默认: 0 
特殊方法的效率高于通用方法,但是特殊方法依赖于一个或多个架构的汇编指令
(一般是类似前导零[CLZ]的指令),因此特殊方法并不支持所有硬件,并且对任务优先级的最大值
也有限制,通常为32*/

(3) Configuration définie par la macro configUSE_TICKLESS_IDLE

#define configUSE_TICKLESS_IDLE                         0                       
/* 1: 使能tickless低功耗模式, 默认: 0 */

(4) Configuration définie par la macro configCPU_CLOCK_HZ

#define configCPU_CLOCK_HZ                              SystemCoreClock         
/* 定义CPU主频, 单位: Hz, 无默认需定义 */

La fréquence d'horloge que nous définissons ici n'est pas 16M

 Nous avons une activation d'horloge dans main.c, après avoir sauté, ce bloc est la véritable initialisation.

 (5) La configuration définie par la macro configSYSTICK_CLOCK_HZ est directement blindée

//#define configSYSTICK_CLOCK_HZ                          (configCPU_CLOCK_HZ / 8)
/* 定义SysTick时钟频率,当SysTick时钟频率与内核时钟频率不同时才可以定义,
 单位: Hz, 默认: 不定义 */

Pourquoi bloquer ? C'est parce que la source d'horloge du minuteur de tic est la même que la source d'horloge principale, il n'est donc pas nécessaire de définir

(6) Configuration définie par la macro configTICK_RATE_HZ

#define configTICK_RATE_HZ                              1000                   
 /* 定义系统时钟节拍频率, 单位: Hz, 无默认需定义 */

(7) Configuration de la définition de la macro configMAX_PRIORITIES

#define configMAX_PRIORITIES                            32                      
/* 定义最大优先级数, 最大优先级=configMAX_PRIORITIES-1, 无默认需定义 */

La priorité maximale définie est 32. Comme il s'agit d'un calcul matériel, il est lié au nombre de bits du système matériel

(8) Configuration de la définition de la macro configMINIMAL_STACK_SIZE

#define configMINIMAL_STACK_SIZE                        128                     
/* 定义空闲任务的栈空间大小, 单位: Word, 无默认需定义 */

Nous voulons créer des tâches inactives, nous ne pouvons pas laisser le CPU inactif

(9) Configuration de la définition de la macro configMAX_TASK_NAME_LEN

#define configMAX_TASK_NAME_LEN                         16                      
/* 定义任务名最大字符数, 默认: 16 */

(10) Configuration de la définition de la macro configUSE_16_BIT_TICKS

#define configUSE_16_BIT_TICKS                          0                     
  /* 1: 定义系统时钟节拍计数器的数据类型为16位无符号数, 无默认需定义 */

        Cette macro est utilisée pour définir le type de données du compteur de ticks système. Lorsque la macro configUSE_16_BIT_TICKS est définie sur 1, le type de données du compteur de ticks système est un entier non signé de 16 bits ; lorsque la macro configUSE_16_BIT_TICKS est définie sur 0, les données le type du compteur de ticks du système est 32. Entier non signé.

(11) Configuration de la définition de la macro configIDLE_SHOULD_YIELD

#define configIDLE_SHOULD_YIELD                         1                       
/* 1: 使能在抢占式调度下,同优先级的任务能抢占空闲任务, 默认: 1 */

        Lorsque la macro configIDLE_SHOULD_YIELD est définie sur 1, sous planification préemptive, les tâches de même priorité peuvent préempter les tâches inactives et prolonger les tranches de temps restantes des tâches inactives.

(12) Configuration de la définition de la macro configUSE_TASK_NOTIFICATIONS

#define configUSE_TASK_NOTIFICATIONS                    1                      
 /* 1: 使能任务间直接的消息传递,包括信号量、事件标志组和消息邮箱, 默认: 1 */

        Lorsque la macro configUSE_TASK_NOTIFICATIONS est définie sur 1, la fonction de notification de tâche est activée. Lorsque la fonction de notification de tâche est activée, chaque tâche occupera 8 octets supplémentaires d'espace mémoire.

(13) Configuration de la définition de la macro configTASK_NOTIFICATION_ARRAY_ENTRIES

#define configTASK_NOTIFICATION_ARRAY_ENTRIES           1                       
/* 定义任务通知数组的大小, 默认: 1 */

        Cette macro permet de définir la taille du tableau de notification de tâche.

(14) Configuration de la définition de la macro configUSE_MUTEXES

#define configUSE_MUTEXES                               1                       
/* 1: 使能互斥信号量, 默认: 0 */

        Cette macro est utilisée pour activer le sémaphore d'exclusion mutuelle. Lorsque la macro configUSE_MUTEXS est définie sur 1, le sémaphore d'exclusion mutuelle est activé ; lorsque la macro configUSE_MUTEXS est définie sur 0, le sémaphore d'exclusion mutuelle n'est pas activé.

(15) Configuration de la définition de la macro configUSE_RECURSIVE_MUTEXES

#define configUSE_RECURSIVE_MUTEXES                     1                       
/* 1: 使能递归互斥信号量, 默认: 0 */

        Cette macro est utilisée pour activer le sémaphore mutex récursif. Lorsque la macro configUSE_RECURSIVE_MUTEXES est définie sur 1, le sémaphore mutex récursif est activé ; lorsque la macro configUSE_RECURSIVE_MUTEXES est définie sur 0, le sémaphore mutex récursif n'est pas activé.

(16) Configuration de la définition de la macro configUSE_COUNTING_SEMAPHORES

#define configUSE_COUNTING_SEMAPHORES                   1                      
 /* 1: 使能计数信号量, 默认: 0 */

        Cette macro est utilisée pour activer le sémaphore de comptage. Lorsque la macro configUSE_COUNTING_SEMAPHORES est définie sur 1, le sémaphore de comptage est activé ; lorsque la macro configUSE_COUNTING_SEMAPHORES est définie sur 0, le sémaphore de comptage n'est pas activé.

(17) Configuration de la définition de la macro configUSE_ALTERNATIVE_API

#define configUSE_ALTERNATIVE_API                       0                       /* 已弃用!!! */

        Cette macro est obsolète après FreeRTOS V9.0.0.

(18) Configuration de la définition de la macro configQUEUE_REGISTRY_SIZE

#define configQUEUE_REGISTRY_SIZE                       8                       /* 定义可以注册的信号量和消息队列的个数, 默认: 0 */

        Cette macro est utilisée pour définir le nombre maximum de files d'attente et de sémaphores pouvant être enregistrés. Cette définition de macro est uniquement destinée au débogage.

(19) Configuration de la définition de la macro configUSE_QUEUE_SET

        Cette macro est utilisée pour activer l'ensemble de files d'attente. Lorsque la macro configUSE_QUEUE_SETS est définie sur 1, l'ensemble de files d'attente est activé ; lorsque la macro configUSE_QUEUE_SETS est définie sur 0, l'ensemble de files d'attente n'est pas activé.

#define configUSE_QUEUE_SETS                            1                      
 /* 1: 使能队列集, 默认: 0 */

(20) Configuration de la définition de la macro configUSE_TIME_SLICING

#define configUSE_TIME_SLICING                          1                       
/* 1: 使能时间片调度, 默认: 1 */

        Cette macro est utilisée pour activer la planification des tranches de temps. Lorsque la macro configUSE_TIMER_SLICING est définie sur 1 et que la planification préemptive est utilisée, la planification des tranches de temps est activée ; lorsque la macro configUSE_TIMER_SLICING est définie sur 0, la planification des tranches de temps n'est pas activée.

(21) Configuration de la définition de la macro configUSE_NEWLIB_REENTRANT

#define configUSE_NEWLIB_REENTRANT                      0                      
 /* 1: 任务创建时分配Newlib的重入结构体, 默认: 0 */

        Cette macro est utilisée pour attribuer une structure réentrante NewLib à chaque tâche. Lorsque la macro configUSE_NEWLIB_REENTRANT est définie sur 1, FreeRTOS attribue une structure réentrante NewLib à l'atome ponctuel du bloc de contrôle des tâches de chaque tâche créée. la structure.

(22) Configuration de la définition de la macro configENABLE_BACKWARD_COMPATIBILITY

#define configENABLE_BACKWARD_COMPATIBILITY             0                       
/* 1: 使能兼容老版本, 默认: 1 */

        Cette macro est utilisée pour être compatible avec les fonctions API de l'ancienne version de FreeRTOS.

(23) Configuration de la définition de la macro configNUM_THREAD_LOCAL_STORAGE_POINTERS

#define configNUM_THREAD_LOCAL_STORAGE_POINTERS         0                      
 /* 定义线程本地存储指针的个数, 默认: 0 */

        Cette macro est utilisée pour allouer un tableau de pointeurs de stockage local de thread dans le bloc de contrôle de tâche. Lorsque cette macro est définie comme étant supérieure à 0, configNUM_THREAD_LOCAL_STORAGE_POINTERS est le nombre d'éléments du tableau de pointeurs de stockage local de thread ; lorsque la macro configNUM_THREAD_LOCAL_STORAGE_POINTERS est 0, le thread est désactivé Tableau de pointeurs vers le stockage local.

(24) Configuration de la définition de la macro configSTACK_DEPTH_TYPE

#define configSTACK_DEPTH_TYPE                          uint16_t               
 /* 定义任务堆栈深度的数据类型, 默认: uint16_t */

        Cette macro est utilisée pour définir le type de données de la profondeur de la pile de tâches, la valeur par défaut est uint16_t.

(25) Configuration de la définition de la macro configMESSAGE_BUFFER_LENGTH_TYPE

#define configMESSAGE_BUFFER_LENGTH_TYPE                size_t                  
/* 定义消息缓冲区中消息长度的数据类型, 默认: size_t */

        Cette macro est utilisée pour définir le type de données de la longueur du message dans le tampon de message, et la valeur par défaut est size_t.

Deuxièmement, la définition de l'allocation de mémoire

1. Configuration de la définition de la macro configSUPPORT_STATIC_ALLOCATION

#define configSUPPORT_STATIC_ALLOCATION                 0                       
/* 1: 支持静态申请内存, 默认: 0 */

        Lorsque la macro configSUPPORT_STSTIC_ALLOCATION est définie sur 1, FreeRTOS prend en charge la gestion de la mémoire statique, et cette macro est définie sur 0 par défaut. Si configSUPPORT_STATIC_ALLOCATION est défini sur 1, l'utilisateur doit également fournir deux fonctions de rappel : vApplicationGetIdleTaskMemory() et vApplicationGetTimerTaskMemory(). Pour plus de détails, reportez-vous au Chapitre 6 "Expérience de création et de suppression de tâches statiques". 2. Configuration de la définition de la macro configSUPPORT_DYNAMIC_ALLOCATION

#define configSUPPORT_DYNAMIC_ALLOCATION                1                       
/* 1: 支持动态申请内存, 默认: 1 */

        Lorsque la macro configSUPPORT_DYNAMIC_ALLOCATION est définie sur 1, FreeRTOS prend en charge la gestion dynamique de la mémoire, et cette macro est définie sur 1 par défaut.

3. Configuration de la définition de la macro configTOTAL_HEAP_SIZE

#define configTOTAL_HEAP_SIZE                           ((size_t)(10 * 1024))   
/* FreeRTOS堆中可用的RAM总量, 单位: Byte, 无默认需定义 */

        Cette macro est utilisée pour définir la taille de la mémoire utilisée pour la gestion dynamique de la mémoire FreeRTOS, c'est-à-dire le segment de mémoire de FreeRTOS, et l'unité est l'octet.

4. Configuration de la définition de la macro configAPPLICATION_ALLOCATED_HEAP

#define configAPPLICATION_ALLOCATED_HEAP                0                       
/* 1: 用户手动分配FreeRTOS内存堆(ucHeap), 默认: 0 */

        Cette macro est utilisée pour personnaliser le tas de mémoire de FreeRTOS. Lorsque la macro configAPPLICATION_ALLOCATED_HEAP est définie sur 1, l'utilisateur doit créer lui-même le tas de mémoire de FreeRTOS, sinon le tas de mémoire de FreeRTOS sera alloué par le compilateur. Avec cette définition de macro, FreeRTOS peut être utilisé pour gérer dynamiquement la mémoire externe.

5. Configuration de l'embryon de définition de macro configSTACK_ALLOCATION_FROM_SEPARATE_HEAP

#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP       0                      
 /* 1: 用户自行实现任务创建时使用的内存申请与释放函数, 默认: 0 */

        Cette macro est utilisée pour personnaliser l'application de mémoire de la pile de tâches et libérer les fonctions pvPortMallocStack() et vPortFreeStack() lors de la création et de la suppression dynamiques de tâches. Lorsque la macro configSTACK_ALLOCATION_FROM_SEPARATE_HEAP est définie sur 1, l'utilisateur doit fournir pvPortMallocStack() et vPortFreeStack() les fonctions.

3. Définitions pertinentes des fonctions de crochet

La fonction dite de crochet est la fonction de rappel

1. configUSE_IDLE_HOOK

#define configUSE_IDLE_HOOK                             0                       
/* 1: 使能空闲任务钩子函数, 无默认需定义  */

        Cette macro est utilisée pour activer l'utilisation de la fonction de hook de tâche inactive. Lorsque la macro configUSE_IDLE_HOOK est définie sur 1, la fonction de hook de tâche inactive est activée et l'utilisateur doit personnaliser la fonction de hook correspondante ; lorsque la macro configUSE_IDLE_HOOK est définie sur 0, l'utilisation de la tâche inactive n'est pas activée Fonction de crochet de tâche.

2. configUSE_TICK_HOOK

#define configUSE_TICK_HOOK                             0                       
/* 1: 使能系统时钟节拍中断钩子函数, 无默认需定义 */

        Cette macro est utilisée pour activer la fonction de crochet d'interruption de l'horloge système. Lorsque la macro configUSE_TICK_HOOK est définie sur 1, la fonction de crochet d'interruption de l'horloge système est activée et l'utilisateur doit personnaliser la fonction de crochet correspondante ; lorsque la macro configUSE_TICK_HOOK est définie à 0, il n'active pas les fonctions de crochet d'interruption à l'aide des tics de l'horloge système.

3. configCHECK_FOR_STACK_OVERFLOW

#define configCHECK_FOR_STACK_OVERFLOW                  0                       
/* 1: 使能栈溢出检测方法1, 2: 使能栈溢出检测方法2, 默认: 0 */

        Cette macro est utilisée pour activer la détection de débordement de pile. Lorsque la macro configCHECK_FOR_STACK_OVERFLOW est définie sur 1, la méthode de détection de débordement de pile 1 est utilisée ; lorsque la macro configCHECK_FOR_STACK_OVERFLOW est définie sur 2, la méthode de détection de débordement de pile 2 est utilisée ; lorsque la macro configCHECK_FOR_STACK_OVERFLOW est définie à 0, la détection de débordement de pile n'est pas activée.

4. configUSE_MALLOC_FAILED_HOOK

#define configUSE_MALLOC_FAILED_HOOK                    0                      
 /* 1: 使能动态内存申请失败钩子函数, 默认: 0 */

        Cette macro est utilisée pour activer l'utilisation de la fonction de hook d'échec d'allocation de mémoire dynamique. Lorsque configUSE_MALLOC_FAILED_HOOK est défini sur 1, l'utilisation de la fonction de hook d'échec d'allocation de mémoire dynamique est activée et l'utilisateur doit personnaliser la fonction de hook appropriée. Peut utiliser fonction de crochet d'échec d'allocation de mémoire dynamique.

5. configUSE_DAEMON_TASK_STARTUP_HOOK

#define configUSE_DAEMON_TASK_STARTUP_HOOK              0                      
 /* 1: 使能定时器服务任务首次执行前的钩子函数, 默认: 0 */

        Cette macro est utilisée pour activer la fonction de raccordement avant la première exécution de la tâche de service du minuteur. Lorsque la macro configUSE_DEAMON_TASK_STARTUP_HOOK est définie sur 1, la fonction de raccordement avant la première exécution de la tâche de service du minuteur est activée. À ce stade, l'utilisateur doit pour définir la tâche de service du minuteur pour la première fois. La fonction de crochet associée à exécuter ; lorsque la macro configUSE_DEAMON_TASK_STARTUP_HOOK est définie sur 0, la fonction de crochet avant la première exécution de la tâche de service du minuteur n'est pas activée.

Quatrièmement, la définition des statistiques de temps d'exécution et d'état des tâches

1. configGENERATE_RUN_TIME_STATS

#define configGENERATE_RUN_TIME_STATS                   0                      
 /* 1: 使能任务运行时间统计功能, 默认: 0 */

        Cette macro est utilisée pour activer la fonction statistique du temps d'exécution de la tâche. Lorsque la macro configGENERATE_RUN_TIME_STATS est définie sur punctual atomic La fonction portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() qui configure la fonction statistique du temps d'exécution de la tâche termine généralement l'initialisation du temporisateur, et l'autre fonction est portGET_RUN_TIME_COUNTER_VALUE (), qui sert à obtenir la valeur de temporisation du timer ; lorsque la macro configGENERATE_RUN_TIME_STATS est définie sur 0, elle n'utilise pas Elle peut compter le temps d'exécution des tâches.

2. configUSE_TRACE_FACILITY

#define configUSE_TRACE_FACILITY                        1                       
/* 1: 使能可视化跟踪调试, 默认: 0 */

        Cette macro est utilisée pour activer le débogage de la trace visuelle. Lorsque la macro configUSE_TRACE_FACILITY est définie sur 1, le débogage de la trace visuelle est activé ; lorsque la macro configUSE_TRACE_FACILITY est définie sur 0, le débogage de la trace visuelle n'est pas activé.

3. configUSE_STATS_FORMATTING_FUNCTIONS

#define configUSE_STATS_FORMATTING_FUNCTIONS            1                       
/* 1: configUSE_TRACE_FACILITY为1时,会编译vTaskList()
和vTaskGetRunTimeStats()函数,默认: 0 */

        Lorsque cette macro et configUSE_TRACE_FACILITY sont tous deux définis sur 1, la fonction vTaskList() et la fonction vTaskGetRunTimeStats() seront compilées, sinon la fonction vTaskList() et la fonction vTaskGetRunTimeStats() seront ignorées.

Cinq, configuration liée à la minuterie logicielle

1. configUSE_TIMERS

#define configUSE_TIMERS                                1                               
/* 1: 使能软件定时器, 默认: 0 */

        Cette macro est utilisée pour activer la fonction de minuterie logicielle. Lorsque la macro configUSE_TIMERS est définie sur 1, la fonction de minuterie logicielle est activée ; lorsque la macro configUSE_TIMERS est définie sur 0, la fonction de minuterie logicielle n'est pas activée.

2. configTIMER_TASK_PRIORITY

#define configTIMER_TASK_PRIORITY                       ( configMAX_PRIORITIES - 1 )   
 /* 定义软件定时器任务的优先级, 无默认configUSE_TIMERS为1时需定义 */

        Cette macro est utilisée pour définir la priorité de la tâche de traitement du temporisateur logiciel. Lorsque la fonction de temporisateur logiciel est activée, le système crée une tâche de traitement du temporisateur logiciel pour traiter le temporisateur logiciel.

3. configTIMER_QUEUE_LENGTH

#define configTIMER_QUEUE_LENGTH                        5                             
  /* 定义软件定时器命令队列的长度, 无默认configUSE_TIMERS为1时需定义 */

        Cette macro est utilisée pour définir la longueur de la file d'attente du temporisateur logiciel. Les opérations telles que l'ouverture, l'arrêt et la destruction du temporisateur logiciel sont toutes réalisées via la file d'attente.

4. configTIMER_TASK_STACK_DEPTH

#define configTIMER_TASK_STACK_DEPTH                    ( configMINIMAL_STACK_SIZE * 2) /* 定义软件定时器任务的栈空间大小, 无默认configUSE_TIMERS为1时需定义 */

        Lorsque la fonction de minuterie logicielle est activée, le système crée une tâche de traitement de minuterie logicielle pour traiter la minuterie logicielle.

Je suppose que tu aimes

Origine blog.csdn.net/zywcxz/article/details/131520802
conseillé
Classement