Aller au contenu

Langages de programmation

Dans ce cours, nous avons programmé les systèmes embarqués en C et en C++. Ces deux langages sont encore les plus utilisés pour les raisons suivantes :

  • C et C++ sont des compilateurs qui génèrent du code machine efficace (en vitesse et en taille)
  • Le langage est suffisamment proche du hardware pour pouvoir le gérer
  • Il existe beaucoup de bibliothèques écrites en C et en C++ pour les systèmes embarqués
  • Il y a beaucoup d’outils et de “frameworks” disponibles en C/C++

Le C et le C++ vont probablement être beaucoup utilisés pour les systèmes embarqués, mais nous voyons cependant de nouveaux chalengers.

Rust

Un langage qui a le vent en poupe en ce moment c’est Rust. Il n’a pas spécialement été fait pour les systèmes embarqués, mais plusieurs caractéristiques font qu’il est très intéressant pour les systèmes embarqués :

  • Rust est aussi un langage compilé qui génère du code machine efficace
  • La gestion de la mémoire sans “garbage collector” est très efficace
  • Rust est capable d’utiliser des bibliothèques écrites en C et en C++

Une section du site Rust est dédiée aux systèmes embarqués et on y trouve de la documentation et des exemples de projets embarqués en Rust.

Carbon

Carbon est un langage de programmation développé par Google et qui a pour ambition de remplacer le C et le C++. Le langage n’en est qu’à ses débuts, mais il est probablement intéressant de suivre son évolution.

TinyGo

Go est aussi un langage de programmation développé par Google. Il est bien plus mûr que Carbon et il est utilisé dans de nombreux projets tels que Kubernetes ou Docker. Une version de Go a été développée pour les systèmes embarqués et s’appelle TinyGo. Il supporte déjà de nombreux microcontrôleurs et il est déjà utilisable pour de réels projets.

MicroPython / CircuitPython

Le langage Python ne semble que très peu adapté aux systèmes embarqués. Les implémentations telles que CPython sont très gourmandes en mémoire et en ressources. Cependant, il existe deux implémentations de Python pour les systèmes embarqués.

  • MicroPython a été créé en 2013 par l’informaticien et physicien australien Damien George. L’implémentation de ce langage est suffisamment compacte pour tenir dans 256 kiB de Flash et se contente de 16 kiB de RAM. Il est actuellement disponible pour de nombreux microcontrôleurs ARM et ESP32.
  • CircuitPython est une version de MicroPython développée par Adafruit. Elle est plus orientée vers les cartes de développement et les cartes à microcontrôleur de la marque.

Python permet aux débutants de se lancer rapidement dans la programmation de systèmes embarqués, mais pour l’instant, il n’est pas vraiment utilisé dans des projets industriels.

Javascript

Javascript est actuellement le langage de programmation le plus utilisé au monde. Il est principalement utilisé pour les applications web, mais il est aussi utilisé pour certaines applications mobiles.

Tout comme Python, Javascript est un langage interprété qui demande beaucoup de ressources, mais il existe bien une implémentation pour les systèmes embarqués.

V (Vlang)

V (ou Vlang) est un langage de programmation créé par Alexander Medvednikov distribué en open source en juillet 2019. Il est similaire à Go, et inspiré par Rust, Swift et Oberon.

Le langage est encore en version Beta et le support pour le développement de systèmes embarqués est encore très rudimentaire, mais il est possible que ce langage se développe dans les prochaines années. À suivre…

Zig

Un autre langage récent est Zig. Il n’est pas encore en version 1.0, mais il a beaucoup de potentiel. Son modèle orienté objet est parfois critiqué, mais ce n’est pas impossible qu’il soit utilisé dans les systèmes embarqués dans les prochaines années.

L’Assembleur

Ce tour d’horizon des langages de programmation ne serait pas complet sans parler de l’assembleur. Il est rare de programmer en assembleur par plaisir, mais il est parfois nécessaire de le faire :

  • Lorsqu’on veut accéder à des registres spécifiques du microcontrôleur
  • Lorsque le microcontrôleur n’a pas les ressources pour supporter un langage de programmation plus évolué (par exemple une taille de mémoire RAM trop petite pour implémenter une stack)
  • Lorsqu’on veut optimiser le code pour qu’il soit le plus rapide (ou le plus petit) possible. Mais notez que les compilateurs sont de plus en plus performants et qu’il est rare de faire mieux qu’eux.