En réalité, un microcontrôleur est très peu sophistiqué. Ce genre de processeur est souvent utilisé pour des contrôleurs : dans un moteur de voiture, par exemple pour gérer l’injection ; dans des dispositifs médicaux comme des pace-makers. L’avantage de la simplicité des microcontrôleurs est qu’ils peuvent être construits à très grande échelle et très bas coût, tout en ayant une taille extrêmement réduite et une consommation énergétique frôlant le zéro absolu. Sur ces petits processeurs, il est donc bien souvent illusoire d’avoir un système d’exploitation (ou alors extrêmement léger) ; OpenGL n’est qu’un lointain rêve.
On doit se restreindre au niveau des outils de développement, surtout pour implémenter des interfaces graphiques : le code déployé sur le microcontrôleur doit être minime, la consommation de mémoire infime. Il n’existe d’ailleurs pas encore de boîte logicielle universelle pour les interfaces graphiques sur ces plateformes, tout au plus des briques utilisables pour certaines parties… et certains processeurs. Et pourquoi pas Qt ?
En l’état, Qt ne peut pas s’appliquer à ce niveau : il faut au minimum des processeurs ARM Cortex A, avec un système d’exploitation comme Linux ou un système temps réel comme INTEGRITY, QNX ou VxWorks. L’objectif est de descendre sur des dispositifs avec des processeurs Cortex M. Il n’y a donc généralement pas de calcul à virgule flottante et à double précision (seulement de la simple précision, c’est-à-dire trente-deux bits). Trois cartes de développement ont été choisies pour les premiers tests :
Grâce au Qt Quick 2D Renderer, pas besoin d’OpenGL, le processeur principal peut tout afficher. Six modules ont déjà été portés : Qt Core, Qt GUI (avec Qt Widgets, Qt QML et Qt Quick Controls 2), ainsi que Qt Network. On peut donc faire fonctionner Qt Quick sur des périphériques aussi peu puissants !
Au niveau de la compilation, les besoins de Qt dénotent par rapport à ce qui est souvent disponible dans le monde des microcontrôleurs : un compilateur C++11 (ou C++98, si on se limite à Qt 5.6, mais alors sans Qt Lite), un système d’exploitation POSIX (pour des fonctions comme mmap, fopen, open). Ces premières expériences ont eu lieu avec RTEMS, un système d’exploitation pour plateformes embarquées qui implémente juste ce qu’il faut de POSIX.
Pour 6,6 Mo de code sur le microcontrôleur et 3,4 Mo de RAM, voici ce que l’on peut obtenir avec Qt Widgets :
Pour Qt Quick, on monte à 9 Mo sur le microcontrôleur et 5 Mo de RAM… avec quelques problèmes de fluidité :
La dernière démo, e-bike, prend 13 Mo sur le microcontrôleur et 10 Mo de RAM :
Source : Qt on Microcontrollers (MCU).
Et vous ?
Qu'en pensez-vous ?