Organisation & Architecture

Le code est séparée en deux : les fonctionnalités partagées entre les cartes sont dans librobot et chaque carte est implémentée dans le repo git firmware-<fonctionnalité>.

Il y a actuellement (après la coupe de 2019), 4 cartes:

Librobot

Cette librairie a été introduite afin de réutiliser du code entre les cartes. Un effet sympathique de cette librairie c'est qu'il possible d'y écrire des tests unitaires.

La documentation de la librairie est regénérée par Travis (script ici) à chaque commit et se trouve ici.

Cartes

Chaque carte est structurée de la même façon. Voici le contenu de firmware-navigation pour le commit c86b1a0cd1d5da5030a1fac55fae41ac4cf591d7 :

├── black_pill.cfg
├── Cargo.lock
├── Cargo.toml
├── debug.sh
├── interfaces
│  ├── stlink-v2-1.cfg
│  └── stm32f1x.cfg
├── memory.x
├── README.md
├── src
│  ├── main.rs
│  ├── robot.rs
│  └── variables.rs
└── target
   ├── debug
   │  ├── build
   │  ├── deps
   │  ├── examples
   │  ├── incremental
   │  └── native
   ├── release
   │  ├── build
   │  ├── deps
   │  ├── examples
   │  ├── incremental
   │  └── native
   └── thumbv7m-none-eabi
      ├── debug
      └── release

Les fichiers Cargo.toml et Cargo.lock listent les dépendances du projet. Il faut noter que Cargo.lock est suivi par git, comme ça tout le monde compile les mêmes versions des librairies (c'est très important pour tout le monde ai le même code !).

Le fichier black_pill.cg et ceux présents dans interfaces sont les fichiers de configuration de OpenOCD afin de flasher la carte.

Le fichier debug.sh invoque gdb aves les bons arguments pour se connecter à OpenOCD et flasher la carte.

Le fichiers memory.x décrit l'organisation de la mémoire du microcontrolleur.

Le fichier README.md sers de documentation minimale pour la carte.

Dans le dossier src on trouve : * main.rs : contiens la logique de la fonction main * robot.rs : contiens l'initialisation du microcontrolleur et de ses périphériques

Enfin, le dernier dossier qui nous intérresse est le dossier target/thumbv7m-none-eabi qui contiens le résultat de la compilation.