
Ada est le langage principal utilisé pour contrôler nos robots depuis 2005. Les raisons de ce choix sont multiples:
Le compilateur Ada GNAT est disponible pour de nombreuses combinaisons de processeurs et de systèmes d'exploitation. À l'époque où nous avons commencé à l'utiliser, il n'avait a priori jamais été utilisé sur un processeur SH4.
Nous avons donc réalisé le premier port de GNAT sur plate-forme SH4/Linux. GNAT étant très versatile, cette étape n'a posée aucun problème majeur. Au cours de nos développements, nous n'avons rencontré aucun bogue ni dans la partie Ada du compilateur ni dans le code généré.
Afin d'augmenter notre confiance dans le code que nous écrivons, nous avons choisi d'utiliser un profil appelé Ravenscar qui ajoute au langage Ada des restrictions supplémentaires adaptées aux systèmes temps-réels. Par exemple:
L'utilisation du profil Ravenscar permet de vérifier indépendamment chaque tâche. Ensuite, au moment de l'assemblage, on vérifie les propriétés d'ordonnancement du système, l'interaction avec le monde extérieur et le flux des données.
De plus, nous avons choisi d'interdire l'allocation dynamique de mémoire. En effet, celle-ci est souvent considérée comme dangereuse pour les systèmes embarqués, en raison des risques de fragmentation de la mémoire. Lorsque le programme de contrôle démarre, il alloue statiquement la mémoire qu'il utilisera; une fois qu'il est lancé, nous sommes certains d'avoir toute la mémoire dont nous avons besoin. On notera que cette restriction supplémentaire est vérifiée automatiquement à la compilation. Toute allocation dynamique sera signalée comme une erreur fatale par le compilateur.
Lors des phases de développement, nous imposons l'utilisation d'une option du langage permettant d'initialiser, lorsque c'est possible, toutes les variables avec une valeur invalide. Par exemple, si un entier est déclaré comme pouvant prendre une valeur comprise entre 0 et 100, le compilateur générera du code supplémentaire pour placer 101 dans toutes les variables de ce type. Si cette variable est utilisée (lue) avant d'être écrite, l'exécutif Ada le détectera et signalera l'emplacement de la lecture fautive.
Ada fournit des constructions permettant de décrire l'organisation physique des différentes structures de données. Ainsi, s'interfacer avec du matériel est trivial: il suffit de décrire à quelle adresse le périphérique se trouve et les bits à utiliser. Ada générera automatiquement les masques et les décalages appropriés.
Le choix d'Ada pour le contrôle du robot s'est avéré très judicieux. Le langage est facile à apprendre et la sécurité qu'il apporte permet de se concentrer sur le problème qu'on cherche à résoudre sans être distrait par des détails d'implémentation. Nous avons donc choisi de conserver ce langage pour les développements futurs.
| Lu | Ma | Me | Je | Ve | Sa | Di |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 |