Route d'apprentissage FreeRTOS, utilisant STM32F103C8T6 comme MCU expérimental (2-1 : tâche)

 Le parcours d'apprentissage porte principalement sur l'application du système d'exploitation FreeRTOS sur STM32F103 (STM32F103C8T6).La méthode de programmation de bibliothèque standard est utilisée et l'IDE utilisé est KEIL5.

Avis! ! ! Ce parcours d'apprentissage peut être appris en achetant la carte système minimale STM32 et certains accessoires, ou vous pouvez apprendre via la simulation Proteus.

Les articles suivants seront publiés simultanément sur le blog personnel (jason1016.club) et sur le CSDN ;

La vidéo sera publiée sur bilibili (UID : 399951374)

1. La notion de tâches 

Le soi-disant concept de tâches de FreeRTOS consiste à diviser les opérations à effectuer en tâches une par une, puis à allouer les tâches en fonction de la priorité via le planificateur de tâches pour réaliser une gestion de déploiement multitâche. Contrairement aux systèmes nus, toutes les opérations sont accumulées dans la fonction principale, ce qui entraînera une redondance du système. Bien que les opérations d'urgence puissent être détournées par interruption, des interruptions fréquentes peuvent affecter le fonctionnement normal du système. Laissez donc FreeRTOS décharger les tâches à exécuter.

2. Statut de la tâche

État d'exécution : comme son nom l'indique (il ne peut y avoir qu'un seul état d'exécution à la fois)

État prêt : les conditions d'exécution ont été remplies, mais l'exécution ne peut pas être effectuée car une tâche de même priorité ou de priorité supérieure est en cours d'exécution.

État bloqué : la tâche attend une condition de déclenchement externe. Lorsque la condition est remplie, elle changera d'état (comme la fonction vTaskDelay(), qui doit attendre la fin du délai) [Il y aura un délai d'attente lorsque la tâche entre dans l'état bloqué. Lorsque ce délai d'attente est dépassé, la tâche sortira de l'état bloquant, même si l'événement en attente n'est pas encore arrivé.]

État suspendu : une fois que la tâche est entrée dans l'état suspendu, elle ne peut pas être appelée par le planificateur pour entrer dans l'état en cours d'exécution, mais la tâche entrant dans l'état suspendu n'a pas de délai d'attente.

3. Priorité des tâches

Chaque tâche peut se voir attribuer une priorité de 0~(configMAX_PRIORITIES-1)

Les numéros de priorité inférieure indiquent des tâches de priorité inférieure, 0 étant la priorité la plus basse et configMAX_PRIORITIES-1 la plus élevée. La tâche inactive a la priorité la plus basse, soit 0.

Le planificateur FreeRTOS garantit que les tâches hautement prioritaires à l'état prêt ou en cours d'exécution obtiennent les droits d'utilisation du processeur. En d'autres termes, seules les tâches les plus prioritaires à l'état prêt seront exécutées.

Et si les tâches avaient la même priorité ?

Les tâches ayant la même priorité à l’état prêt utiliseront le planificateur de tranche de temps à tour de rôle pour obtenir le temps d’exécution. (Le planificateur de tournoi à la ronde sera discuté plus tard)

4. Création et suppression de tâches

La création de tâches est divisée en création dynamique et création statique (la différence est que la création dynamique alloue automatiquement les piles de tâches RAM, tandis que l'allocation statique est manuelle) [Dans ce qui suit, nous utilisons principalement des méthodes dynamiques pour la création de tâches] et sont utilisées pour stocker les attributs de tâche dans méthodes dynamiques. L'adresse du bloc de contrôle de tâche du

Une tâche se compose principalement de plusieurs parties :

1. pxTaskCode : fonction de tâche

2. pcName : Nom de la tâche, généralement utilisé pour le suivi et le débogage. La longueur du nom de la tâche ne peut pas dépasser : configMAX_TASK_NAME_LEN

3. usStackDepth : taille de la pile de tâches, notez que la pile réellement appliquée est 4 fois supérieure à usStackDepth. La taille de la pile de tâches de la tâche inactive est configMINIMAL_STACK_SIZE Le rôle de la pile de tâches peut protéger (restaurer) la scène lorsque la tâche est interrompue

4. pvParameters : paramètres passés à la fonction tâche

5. uxPriotiry : priorité des tâches, plage 0~ configMAX_PRIORITIES-1

6. pxCreatedTask : handle de tâche. Une fois la tâche créée avec succès, le handle de cette tâche sera renvoyé. Ce handle est en fait la pile de tâches de la tâche. Ce paramètre est utilisé pour enregistrer le handle de tâche. D'autres fonctions API peuvent utiliser ce handle.

    //创建开始任务
    xTaskCreate((TaskFunction_t )start_task,            //任务函数
                (const char*    )"start_task",          //任务名称
                (uint16_t       )START_STK_SIZE,        //任务堆栈大小
                (void*          )NULL,                  //传递给任务函数的参数
                (UBaseType_t    )START_TASK_PRIO,       //任务优先级
                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄              

Fonction de suppression de tâches :

vTaskDelete( TaskHandle_t xTaskToDelete ) //参数为需要删除的任务函数

5. Suspension et reprise des tâches

Suspension de tâche : définissez une tâche à l'état suspendu. La tâche qui entre dans l'état suspendu n'entrera jamais dans l'état en cours d'exécution.

void vTaskSuspend( TaskHandle_t xTaskToSuspend) //参数为需要挂起的任务函数

Récupération de tâche : Reprendre une tâche de l'état suspendu à l'état prêt

void vTaskResume( TaskHandle_t xTaskToResume) //参数为需要恢复的任务函数

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume) //此函数是 vTaskResume()的中断版本,用于在中断服务函数中恢复一个任务

Cet article est rédigé indépendamment par l'auteur. Tous les articles originaux de ce BLOG ne peuvent pas être utilisés à des fins commerciales ou dans les médias traditionnels sans mon autorisation. Veuillez indiquer la source de la réimpression par les médias en ligne, sinon il s'agit d'une contrefaçon.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_61908666/article/details/132012979
conseillé
Classement