Published on

Introduction à FreeRTOS

Authors

Je voudrais préciser que tout le blog et mes futurs articles (d'ici la fin de ce mois) seront en anglais et plus en français. Désolé de l'annoncer ainsi mais je présenterai bientôt les raisons.

Cet article n'est pas pour un débutant en système embarqué mais il faut juste être à l'aise avec les micronctrôleurs.

FreeRTOS-banner

Parlons de FreeRTOS

FreeRTOS ou Free Real Time Operating Système est un kernel(noyau) multitâche (multitask) pour microcotrôleur. Il vous permet donc (en simulant) l'exécution de plusieurs tâches en en même temps un peu comme sur nos systèmes d'exploitations habituels: Window, Linux, Android...où le matériel dispose le plus souvent de plusieurs coeurs pour permettre ce fonctionnement. En considérant la carte Arduino dotée de l'AVR, on peut donner l'exemple suivant de plusieurs tâches à réaliser simultanément:

  • Afficher dans le moniteur série (Serial) la valeur retournée par un capteur de température - tâche 1
  • Eteindre et allumer une led suivant une fréquence donnée - tâche 2
  • Se connecter à un serveur web via le module GSM par exemple, pour y envoyer l'état de la led (vous pouvez en faire un TP 😎) - tâche 3
mcu-without-rtos

Un MCU sans RTOS et

mcu-with-rtos

Un MCU avec FreeRTOS

Comme les microcontrôleurs sont limités en capacités(mémoires, processeurs, fréquence, ...), FreeRTOS a mis en place une architecture (je l'avoue puissante) basée sur l'utilisation correcte de la RAM et de son allocation, de gestionnaires de tâches (scheduler), et pleins d'autres fonctionnalités que nous pouvons découvrir par la suite.

Que nous offre FreeRTOS

Actuellement je suis encore en train de lire le guide tutoriel sur FreeRTOS qu'on peut retrouver sur leur site (environ 400 pages 😭, vous pouvez aller le lire aussi). Je vais néanmoins nous dispenser d'abord de certains points que je trouve un peu complexe et utiliser dans les prochains articles le support pour Arduino.

Avantages de FreeRTOS

  • Chaque architecture (microcontrôleur/MCU) a ses caractéristiques et son design, donc FreeRTOS a été porté sur différentes plateformes dont le ARM, AVR, Altera, NXP, Renesas,...liste disponible ici
  • Utilisation efficiente de la RAM: allocation dynamique et statique de cette dernière lors de la compilation et de l'exécution basée sur l'utilisation du heap (tas) en évitant sa fragmentation
  • Gestionnaire de tâches et la facilité d'ajouter, supprimer et modifier l'exécution des tâches
  • L'existence des queue pour la communication entre les tâches: partage de données entre les tâches,...
  • La prise en charge des interruptions par exmple récupérer l'appui sur un bouton sur une broche de notre carte
  • Un système de timer, pour exécuter une fonction/task à une date dans le futur
  • Même une version du delay utilisé par les microcontrôleurs pour l'arrêt momentané du programme mais ici utilisé lors de l'exécution des tâches: vTaskDelay() - même fonction
  • Intégration des références de AWS (Amazon Web Services) pour les projets IoT voulant se baser sur leur cloud - à explorer
  • Le support de l'OTA (Over The Air) updates ou mise à jour à distance du code source via l'intégration de AWS toujours pour les systèmes supportant l'OTA - à explorer
  • Des noms de fonctions assez parlants
  • Pleins de démos sur son utilisation et le code source est totalement ouvert et gratuit à toute utilisation. Pour des options et fonctionnalités vraiment avancées des versions commerciales sont disponibles - ( 😂un ami à moi cherchera partout en gratuité la version commerciale, c'est plus fort que lui😂 )

En lisant le manuel j'avoue que la manière dont le système gère l'allocation de la mémoire est vraiment bien pensée et évite les fuites de mémoires au maximum mais aussi la fragmentation du tas d'allocation. Par exemple son allocation de la ram se fait en allouant simplement (je le dis ainsi) un tableau à taille fixe lors de la compilation si vous ne changer rien. Et c'est dans ce tableau que les différentes allocations de mémoires se feront. Différents algorithmes sont alors utilisés en fonction de vos besoins: heap 1 à heap 5.

Concepts clés de FreeRTOS

  • Heap ou tas: "portion" de la RAM où les allocations de mémoires (variables, allocation dynamique, task,...) sont faites
  • Task ou tâches: les tâches à exécuter simultanément qui ne sont rien d'autres que des fonctions en language C - comme d'hab.
  • Queue: Système FIFO (First In First Out) de transmission de données entre les tâches (variables, pointeurs...) et même entre des tâches à exécuter dans le futur ( awesome )
  • Interruption management: gestion des "interruptions" suite à un évènement le plus souvent non périodique.
  • Sémaphore (à voir).

Donc?

Ok, nous venons de découvrir rapidement FreeRTOS et ses avantages mais vous pouvez consulter le manuel et même la référence pour en savoir plus. Dans un prochain article nous testerons des codes sur la carte Arduino UNO en utilisant le support de FreeRTOS pour ce dernier. N'hésitez pas à me faire des retours dans mon mail ou sur mon Twitter ou Linkedin dont les références sont en dessous.

Et sur ce: can you smell what TawalMc is cooking?