Comment sélectionner le système d'exploitation en temps réel et la plateforme de microcontrôleurs adaptés pour l'IoT
Avec la contribution de Rédacteurs nord-américains de DigiKey
2019-06-12
Le développement d'un dispositif Internet des objets (IoT) peut être plus complexe que de nombreux développeurs et entreprises ne le réalisent. Le seul fait de connecter un système embarqué au cloud peut considérablement augmenter la complexité de temporisation du système. Face à cette augmentation de la complexité de temporisation, les développeurs doivent définir une meilleure solution pour gérer comment leurs logiciels pourront sélectionner le code à exécuter au moment opportun. Pour éviter d'écrire des planificateurs personnalisés ou de traiter la temporisation sans système d'exploitation, la meilleure solution consiste plutôt à utiliser un système d'exploitation en temps réel (RTOS) pour simplifier la gestion complexe de la temporisation.
L'un des défis actuels dans l'utilisation d'un RTOS repose sur le fait que de nombreux développeurs partent d'un environnement sans système d'exploitation (OS), et sélectionner le RTOS approprié pour une application donnée peut être un défi. Une étude sommaire du marché en ligne des RTOS indique que les développeurs ont à leur disposition plus de 100 modèles de RTOS différents, open-source ou certifiés commerciaux. Comment alors sélectionner un RTOS ?
Dans cet article, nous allons expliquer comment évaluer le RTOS qui convient le mieux à votre application, puis examiner les plateformes de développement de STMicroelectronics et Renesas pouvant être utilisées pour démarrer.
Facteurs à prendre en compte dans la sélection d'un RTOS
Les systèmes d'exploitation en temps réel constituent la base sur laquelle les développeurs construisent leur code d'application. La sélection du RTOS approprié est essentielle pour s'assurer que l'application est développée sur une base solide et éprouvée. Cependant, la sélection du RTOS se fonde souvent uniquement sur un seul paramètre : le coût.
Même s'il est important, le coût ne doit pas être le seul facteur à prendre en compte. Une équipe de développement peut inutilement investir dans un RTOS commercial à un coût dix fois plus élevé, en cas de manque de support ou de difficultés de portage et d'implémentation du RTOS sélectionné, sans parler du temps éventuellement perdu sur le projet. En général, l'équipe de développement doit prendre en compte huit catégories différentes dans la sélection d'un RTOS pour son application. Citons notamment :
- Risque et responsabilité juridiques
- Performances
- Fonctionnalités
- Coût
- Écosystème
- Intergiciel
- Fournisseur du RTOS
- Préférences d'ingénierie
Chaque catégorie peut avoir plusieurs critères qui doivent être évalués pour chaque RTOS. Par exemple, en matière de responsabilité juridique, les équipes doivent prendre en compte les facteurs suivants :
- Responsabilité relative à la contrefaçon des RTOS
- Indemnisation
- Garantie
- Évaluation juridique obligatoire du RTOS
En ce qui concerne les performances, les développeurs doivent prendre en compte les points suivants :
- Empreinte mémoire exécutable
- Empreinte RAM
- Degré maximum de déterminisme
- Efficacité d'exécution
Chaque catégorie principale peut être examinée par l'équipe de développement et de direction pour déterminer les critères d'évaluation des RTOS. L'évaluation de plusieurs RTOS distincts peut être réalisée à l'aide de la matrice de Kepner-Tregoe (KT), une fois les critères définis. Il s'agit d'un modèle rationnel de prise de décision qui permet de collecter, de prioriser et d'évaluer des informations en mettant l'accent sur l'évaluation et la priorisation des risques. Cela permet d'éliminer les préjugés personnels dans le processus de prise de décision et de faciliter la détermination du meilleur choix, en limitant autant que possible les effets négatifs. Voyons comment utiliser une matrice KT pour sélectionner un RTOS.
Sélectionner un RTOS à l'aide d'une matrice KT
La matrice KT de sélection de RTOS peut être configurée comme illustrée à la Figure 1 et la Figure 2. Le principe repose sur l'identification des critères de sélection pour chaque catégorie de sélection, afin de les répertorier dans une colonne. Nous pouvons identifier une pondération pour chaque critère en fonction de l'importance des critères sur une échelle de 1 à 5, 5 étant extrêmement important (p. ex., le coût) et 1 pas très important (p. ex., la responsabilité juridique). Chaque membre de l'équipe peut ensuite créer des colonnes pour classer le niveau d'importance des critères respectifs pour chaque RTOS étudié. Chaque critère peut ensuite être pondéré et totalisé pour générer un résultat numérique non biaisé. Le RTOS correspondant le mieux aux critères est celui ayant la valeur la plus élevée.
Figure 1 : La partie supérieure de la matrice KT de sélection de RTOS. Elle inclut l'évaluation du risque de responsabilité, les performances des RTOS, leurs fonctionnalités et leur coût. (Source de l'image : Beningo Embedded Group)
Figure 2 : La partie inférieure de la matrice KT de sélection de RTOS, qui inclut l'évaluation de l'écosystème, l'intergiciel, le fournisseur et l'exploitation. (Source de l'image : Beningo Embedded Group)
Les exemples illustrés dans les Figures 1 et 2 constituent un nombre exhaustif des critères à évaluer. Ces critères peuvent dépasser ce que la plupart des équipes de développement voudraient évaluer, mais leur nombre peut être facilement réduit en configurant la pondération à 0 ou en masquant la ligne de la feuille de calcul.
Plateformes sur lesquelles lancer le développement RTOS
L'une des difficultés que les développeurs peuvent rencontrer dans l'évaluation d'un RTOS concerne la détermination de la conformité du produit à leurs besoins de performances et de capacités. Dans la plupart des cas, un développeur ne pourra en être certain à moins de réaliser une évaluation détaillée et d'utiliser directement le RTOS. Il s'avère que la solution la plus simple et la plus abordable pour évaluer et tester un RTOS consiste à exploiter une plateforme de développement existante utilisant le produit. Examinons quelques plateformes prenant en charge les systèmes d'exploitation open-source populaires FreeRTOS et ThreadX d'Express Logic.
La première plateforme que nous allons étudier est la plateforme STM32Cube de STMicroelectronics. La plateforme STM32Cube prend en charge FreeRTOS sur les environnements de développement STM32CubeMx et STM32CubeIDE de STMicroelectronics. Ces outils permettent au développeur d'activer FreeRTOS simplement en cochant la case correspondante, puis en utilisant un outil de configuration FreeRTOS pour définir toutes les valeurs de configuration intégrées. Cela permet au développeur d'exploiter FreeRTOS très rapidement pour pouvoir commencer à évaluer ses fonctionnalités et les spécifications de ses performances.
La chaîne de compilation de STMicroelectronics inclut de nombreuses options de cartes de développement. La carte de découverte STM32F429 (STM32F429I-DISC1) est l'une des cartes de développement testées et éprouvées, et extrêmement populaires depuis plusieurs années (Figure 3).
Le STM32F429 est un processeur Arm® Cortex®-M4 fonctionnant à une fréquence jusqu'à 168 MHz. Le microcontrôleur prend en charge 2 Mo de mémoire Flash et 256 ko de SRAM, ce qui représente un espace de codage et de mémoire suffisant pour développer une application assez avancée. La carte de développement inclut également un LCD, plusieurs LED et des E/S extensibles.
Figure 3 : La carte de découverte STM32F429I est une carte de développement économique utilisant un processeur Arm Cortex-M4 pour fournir une puissance de traitement suffisante aux développeurs souhaitant évaluer un RTOS. (Source de l'image : STMicroelectronics)
Pour les développeurs utilisant des périphériques IoT basés sur RTOS et devant également exécuter un apprentissage automatique, la carte de découverte STM32F7 (STM32F746G-DISCO) est mieux adaptée (Figure 4). La carte de découverte STM32F7 est basée sur un processeur Arm Cortex-M7 à cache. Elle fonctionne à une fréquence d'horloge atteignant 216 MHz et inclut une mémoire Flash de 1 Mo et une SRAM de 340 ko. La carte de développement inclut également : écran de 480 x 272 pixels de 4,3 pouces, Ethernet, emplacement SD, USB, connexions pour haut-parleur, microphone, etc.
Figure 4 : La carte de découverte STM32F746G est une carte de développement économique utilisant un processeur Arm Cortex-M7 pour permettre aux développeurs d'évaluer un RTOS ainsi que les inférences d'apprentissage machine nécessaires sur le périphérique IoT. (Source de l'image : STMicroelectronics)
La dernière carte de développement à prendre en compte est la carte Nucleo STM32L0 (NUCLEO-L073RZ) (Figure 5). La carte Nucleo STM32L0 est basée sur le processeur Arm Cortex-M0+, conçu pour une consommation énergétique minimale, et elle est idéale pour les périphériques IoT basse consommation alimentés par batterie. Le microcontrôleur STM32L0 fonctionne à une fréquence atteignant 24 MHz et inclut une mémoire Flash de 192 ko et une SRAM de 20 ko. Ces capacités sont très similaires aux caractéristiques minimum recommandées pour exécuter un RTOS. La carte de développement est rudimentaire, avec seulement une LED et un commutateur utilisateur.
Figure 5 : La carte de développement NUCLEO-L073RZ STM32L0 est basée sur un processeur Arm Cortex-M0+ conçu pour fournir de hautes performances pour les dispositifs basse consommation. (Source de l'image : STMicroelectronics)
La plateforme Synergy™ de Renesas est le second modèle que nous allons examiner. Elle se démarque dans le secteur des produits embarqués par l'intégration d'une large gamme de logiciels tiers et d'outils de développement de fournisseurs agréés.
Par exemple, si l'utilisateur d'une carte de développement de STMicroelectronics souhaite utiliser le RTOS ThreadX d'Express Logic avec l'environnement de développement et le compilateur Embedded Workbench d'IAR Systems, il doit approcher IAR pour le compilateur et Express Logic pour le RTOS, et acheter les licences d'utilisation. Cependant, en achetant uniquement un seul microcontrôleur faisant partie de la plateforme Synergy de Renesas, le développeur bénéficie automatiquement de ces outils et du RTOS compatible, en plus d'autres intergiciels.
Pour les développeurs souhaitant tester ThreadX sur un processeur haut de gamme, la carte de développement Synergy SK-S7G2 (YSSKS7G2E30) de Renesas constitue l'option idéale (Figure 6). La carte SK-S7G2 est basée sur un processeur Arm Cortex-M4 s'exécutant à 240 MHz et inclut une mémoire Flash de 3 Mo et une RAM de 640 ko. Cette carte de développement inclut plusieurs fonctionnalités, dont un LCD, plusieurs LED, une extension E/S, un CAN, une extension PMOD et un accès simple aux ports série et aux E/S supplémentaires.
Figure 6 : La carte de développement Synergy SK-S7G2 de Renesas est équipée d'outils de développement commerciaux, notamment le RTOS ThreadX d'Express Logic. (Source de l'image : Renesas)
Une autre carte de développement pouvant être utilisée pour tester ThreadX est la carte Synergy TB-S5D5 (YSTBS5D5E10) de Renesas (Figure 7). La TB-S5D5 est une carte de développement économique dotée d'un processeur Arm Cortex-M4 fonctionnant à 120 MHz avec une mémoire Flash de 1 Mo et une SRAM de 384 ko. La carte de développement inclut des fonctionnalités minimales pour limiter le coût. Elle inclut un bouton utilisateur, une fonction tactile capacitive et une LED.
Figure 7 : La carte de développement Synergy TB-S5D5 de Renesas fournit aux développeurs une mémoire Flash code de 1 Mo et une SRAM de 384 ko pour tester le ThreadX. (Source de l'image : Renesas)
Le kit IoT Synergy AE-Cloud1, YSAECLOUD1 (Figure 8 ) et le kit IoT cellulaire Synergy AE-Cloud2, YSAECLOUD2 (Figure 9) de Renesas constituent des alternatives intéressantes, en particulier pour les développeurs privilégiant les applications IoT.
Le kit IoT Synergy Cloud1 fournit aux développeurs la capacité de se connecter au cloud via Wi-Fi, tandis que le kit cellulaire Cloud2 leur permet également de se connecter via réseau cellulaire. Ces deux cartes de développement sont basées sur un processeur S5D9 et incluent des capteurs intégrés et des LED pouvant être surveillés et contrôlés depuis le cloud. Ces kits incluent également des logiciels pré-installés, dont ThreadX. Ils permettent au développeur de tester une solution de connectivité complète à l'aide de leur RTOS. (Cela peut permettre au développeur d'évaluer la section intergiciel de la matrice KT mentionnée précédemment.)
Figure 8 : Le kit IoT Synergy AE-Cloud1 de Renesas est une carte de développement spécifiquement conçue pour les dispositifs IoT se connectant au cloud via Wi-Fi. Il inclut une capacité de contrôle des LED et de surveillance des valeurs de capteurs à partir d'un fournisseur cloud, comme Amazon Web Services (AWS) ou Microsoft Azure. (Source de l'image : Renesas)
Figure 9 : Le kit IoT cellulaire Synergy AE-Cloud2 de Renesas est une carte de développement conçue pour les dispositifs IoT se connectant au cloud via Wi-Fi ou un réseau cellulaire. Il inclut une capacité de contrôle des LED et de surveillance des valeurs de capteurs à partir d'un fournisseur cloud, comme AWS ou Azure. (Source de l'image : Renesas)
Remarque importante sur les plateformes : En évaluant un RTOS sur une plateforme, veillez à ce que les critères de comparaison soient équivalents. Par exemple, si vous évaluez FreeRTOS sur la carte de découverte STM32F429 fonctionnant à 168 MHz, veillez à utiliser la même carte de développement ou une carte fonctionnant à la même fréquence d'horloge pour évaluer les autres RTOS.
Conseils et astuces d'utilisation d'un RTOS
Chaque RTOS offre ses propres « conseils et astuces », mais plusieurs règles générales peuvent s'appliquer universellement à tous les modèles :
- Allouez des tâches et des objets RTOS de manière statique. L'allocation dynamique de tâches et d'objets requiert l'utilisation de l'allocation mémoire (malloc()), qui est non déterministe et peut entraîner des problèmes de fragmentation de tas conduisant à de faibles performances ou même à des plantages système dans le pire des cas.
- Modifiez la taille par défaut de la pile en fonction des besoins de votre application. De nombreux RTOS fournissent une valeur de pile par défaut excessive pour la plupart des tâches, résultant en un gaspillage de RAM. Configurez manuellement la taille par défaut de la pile, mais veillez également à ajuster la taille de la pile pour chaque tâche selon sa fonction et ses besoins.
- Les fonctions appelées à partir d'une tâche doivent être réentrantes. Cela permet d'éviter le risque de corruption des données des autres tâches dans le cas d'une fonction qui a été appelée à partir de plusieurs tâches et interrompue par une tâche de priorité élevée.
- Utilisez des pools de blocs mémoire si possible. Un pool de blocs mémoire est un pool de mémoire ayant un comportement déterministe qui peut être utilisé pendant l'exécution pour allouer la mémoire de façon dynamique. Il s'agit d'une option préférable à la fonction malloc(), mais la plupart des systèmes d'exploitation open-source n'incluent pas cette capacité de gestion de mémoire.
- Limitez le nombre de tâches exécutées dans l'application. L'utilisation d'un RTOS incite à créer beaucoup de tâches, cependant la création de tâches non requises peut fortement réduire la mémoire disponible en raison de la nécessité d'un bloc de contrôle de tâches et d'un espace de pile distinct correspondant.
Conclusion
L'IoT étant à l'origine de l'augmentation de la complexité logicielle dans les systèmes embarqués, l'utilisation d'un RTOS est devenue une exigence pour permettre aux développeurs de faire face à cette complexité et la résoudre. Cependant, la solution ne se résume pas à sélectionner n'importe quel RTOS. En effet, tous les RTOS ne sont pas égaux et un RTOS allant à l'encontre des objectifs des développeurs peut entraîner des pertes de temps et d'efforts considérables.
Les développeurs doivent plutôt adopter une approche proactive dans la sélection d'un RTOS et évaluer avec soin tous les différents aspects tant du RTOS que des considérations périphériques, comme le fournisseur de RTOS et le support disponible en cas de problème. Une approche efficace consiste à commencer avec une matrice KT pour évaluer avec soin les RTOS à l'étude, puis à exécuter le RTOS sélectionné sur des plateformes de microcontrôleurs qui peuvent entièrement le prendre en charge afin de vérifier s'il est adapté à l'application.

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.