Remarque: cette question mentionne spécifiquement deux RTOS, mais est plus générique et peut probablement être répondue par quiconque a déjà écrit du code C pour des RTOS intégrés et a fait exécuter son logiciel directement sur des MCU.
Je souhaite en savoir plus sur les RTOS intégrés et écrire des applications pour eux. Je regarde actuellement Embox et RIOT car ils sont open source, modernes, actifs et semblent avoir une excellente documentation. Mon objectif comporte deux phases: la phase 1 est de comprendre comment compiler et flasher ces OS sur un MCU (probablement AVR ou ARM). La phase 2 consiste ensuite à écrire un simple programme C (essentiellement un démon sans tête), qui évoluerait avec le temps en tant qu '"application de loisir". Je flasherais / déploierais ensuite ce programme sur le même MCU, déployant ainsi avec succès une application composée d'Embox / RIOT et de mon application résidant dessus.
Avant de parcourir les routes qui mènent finalement à des impasses, je suis tombé sur cet article qui explique assez bien pourquoi les applications en temps réel, écrites en C / assembleur et flashées sur les MCU, n'ont pas vraiment besoin de RTOS en dessous. .
Alors maintenant, je suis vraiment confus et je remets en question une partie de ma compréhension fondamentale de la théorie informatique. Je suppose que j'essaie de prendre la décision d'utiliser ou non Embox / RIOT en premier lieu, soit:
- Gardez le cap et continuez avec une «pile d'applications» sur le MCU des deux applications OS +; ou
- Tenez compte de l'avertissement de l'article et allez simplement avec un MCU exécutant mon application "bare metal"
De toute évidence, le premier est plus de travail, et il vaut donc mieux avoir une bonne raison / récompense pour aller dans cette voie. Je demande donc: quels sont les avantages réels que ces RTOS intégrés (et similaires) offrent aux développeurs d'applications MCU / C? De quelles fonctionnalités spécifiques mon application C pourrait-elle bénéficier (peut-être en ne réinventant pas la roue?) En utilisant un RTOS? Qu'est-ce qui est perdu en abandonnant le RTOS et en devenant nu?
Je demande des exemples concrets ici, pas le battage médiatique que vous obtenez lorsque vous accédez à l'entrée wikipedia pour les RTOS ;-)
la source
Réponses:
Les programmes de microcontrôleur se composent d'un certain nombre de tâches . Disons que vous vouliez faire une monture de télescope contrôlée par ordinateur. Les tâches seraient les suivantes:
Il s'agit d'un ensemble de tâches assez typique pour quelque chose pour lequel vous utiliseriez un microcontrôleur, et sont assez faciles à gérer avec une boucle infinie, comme:
Si vous continuez à ajouter et à ajouter des fonctionnalités, vous finissez par rencontrer des problèmes courants pour lesquels vous souhaitez créer des abstractions, comme:
readSensors
prend trop de temps, vous voulez pouvoir l'interrompre et y revenir plus tard.Un ou deux de ces éléments peuvent être manipulés manuellement relativement facilement. Si vous rencontrez suffisamment de ces types de problèmes assez fréquemment pour commencer à les généraliser dans les bibliothèques, vous avez essentiellement réinventé un RTOS. Si la gestion des tâches de votre programme est suffisamment complexe, même si vous n'utilisez pas un RTOS standard, vous finirez par en réinventer un mal.
Cependant, d'après mon expérience, la ligne où vous voulez un RTOS est très proche de la ligne où vous voulez un microprocesseur au lieu d'un microcontrôleur. Si vous prévoyez que votre micrologiciel deviendra aussi complexe, il est généralement préférable de suivre la voie du microprocesseur depuis le début.
la source
J'ai écrit ma propre bibliothèque coopérative multi-threading pour ARM Cortex-M0.
C'était à peine quelques pages de code, et la première version de celui-ci n'a pas pris plus d'un jour pour écrire et déboguer.
Le gros avantage du roll-your-own est que vous connaissez le code et que vous pouvez le porter sur des puces que le RTOS pourrait ne pas prendre en charge. De plus, vous passez moins de temps à réfléchir à des questions telles que "est-ce que ça va planter si j'essaie d'utiliser les fonctionnalités A et B simultanément?" Depuis que vous avez écrit le code, vous connaissez la réponse.
Le filetage est la principale chose que vous obtenez d'un RTOS, et il s'avère que ce n'est pas si grave de vous implémenter. Il est rare que vous ayez besoin de nombreuses fonctionnalités d'un RTOS. Mais si vous répondez à vos besoins et que vous vous en rendez compte, utilisez un RTOS.
la source