Compilation
Dans cette section, tu vas faire le grand pas et mettre en place tous les outils pour bidouiller sur les cartes du club robot !
Attention, les instructions sont valables uniquement pour Linux, et sont à adaptées pour ceux qui ont des distributions Linux différentes de Ubuntu.
Outils génériques
Tout d'abord il te faut installer les outils suivants :
gdb-arm-none-eabi
:gdb
est un débuggeur, tu installes ici la version pour l'architecturearm
sans os (none
). Tu trouveras plus d'informations sur gdb par ici. Pour les notions d'architecture, tu peux toujours lire la page sur l'architecture matérielle sur wikipédia.gcc-arm-none-eabi
:gcc
est un compilateur pour le langage C. Tu installes la version pour compiler vers l'architecturearm
ici.openocd
: cet outil permet de communiquer avec le microcontrôleur : c'est grâce à lui que l'on peut envoyer des exécutables dessus et les déboguer.
Sur Ubuntu, cela se fait en exécutant les commandes suivantes dans un terminal :
sudo apt update
sudo apt install git gdb-multiarch gdb-arm-none-eabi gcc-arm-none-eabi openocd
La première commande mets à jour les paquets disponibles, la deuxième les installe.
Customisation de gdb
Bien que très puissant, gdb propose une interface d'un autre siècle. Je te propose de rendre cette interface plus agréable !
- On récupère un fichier tout fait qui rend l'interface de gdb supportable :
wget -P ~ git.io/.gdbinit
- On autorise le chargement de ce fichier par gdb :
echo "set auto-load safe-path /" >> ~/.gdbinit
Rust
Pour installer Rust, tu peux te référer aux instructions sur rustup.rs. Les paramètres par défaut sont très bien. Si tu as bien installé Rust, quand tu ouvres un nouveau terminal et que tu tapes :
rustc --version
Il devrait s'afficher un texte qui ressemble à ça (tu auras certainement une version plus récente, là il s'agit de la version du 20 Mai 2019) :
rustc 1.35.0 (3c235d560 2019-05-20)
Utilitaires
Pour bidouiller plus efficacement, tu peux aussi installer quelques outils plutôt pratiques.
Obligatoire : rustfmt
Dans un projet informatique, plusieurs personnes ont des conventions d'alignement du texte différent, différentes manières d'aller à la ligne dans les déclarations, etc. Si jamais tu t'ennuies, tu peux demander à un barbu si il préfère les tabulations ou les espaces pour indenter le code, flame ware garantie !
Dans le but d'uniformiser le code produit par tout le monde, on utilise un outil rustfmt qui va venir formater le code. Plus besoin de se prendre la tête avec l'indentation ou les retours à la ligne dans les gros appels de fonctions : on lance rustfmt
et le code est formaté.
Cet outil est obligatoire, autrement ton installation ne fonctionnera pas. Pour l'installer il suffit de taper dans un terminal :
rustup component add rustfmt-preview
Optionnel : cargo-edit
L'outil cargo-edit
permet d'ajouter facilement des librairies depuis la ligne de commande dans un projet. Pour plus d'informations tu peux aller lire la description de l'outil par ici.
cargo install cargo-edit
Optionnel cargo-clone
L'outil cargo-clone
permet de récupérer le code source de n'importe quelle librairie disponible sur crates.io en une ligne de commande.
cargo install cargo-clone
Erreurs courantes
Quelques erreurs arrivent régulièrement et sont dû à une mauvaise configuration du compilateur. En particulier l'erreur : error: linking with `cc` failed: exit code: 1
peut être résolue ainsi :
On installe gdb-multilib : sudo apt install gcc-multilib
.
Si l'erreur n'est pas résolue, on vérifie que l'on a choisi le bon compilateur : sudo update-alternatives --config gcc
et choisir gcc-8.
expected struct heapless::string::String, found a different struct heapless::string::String
La version de librobot utilisée n'est pas la bonne, il faut choisir la branch "master" (et non "dev-new-pid") :
nano Cargo.toml
librobot = {git="https://github.com/ClubRobotInsat/librobot", default-features=false}