«

»

Sep 14

Ada et Robots #1: démarrage

Nos robots sont programmés en Ada. Pourquoi? Alexis écrivait en 2008 « c’est un langage beaucoup plus sûr ». C’est vrai – mais excessivement réducteur.

Cette série d’articles va vous apporter les premiers pas d’Ada pratique sur STM32 – on ne va pas trop parler au début du typage fort et des restrictions du profile Ravenscar.

Le programme est le suivant:

  1. Démarrage: installer les outils de développement (GNAT, bibliothèques, outils associés); compiler un premier programme (vide).
  2. Clignotons des diodes: comment (presque) contrôler le monde
  3. Bases d’Ada en 60 secondes chrono: packages, fichiers programme, GNATMake…
  4. Le multitâche basique: faisons plein de choses en même temps – sans effort.

[Cette liste sera mise à jour au fur et à mesure de la publication des articles]

Liste de courses

On va avoir besoin des outils suivants:

  • Un PC – idéalement sous linux. Votre serviteur utilise une debian stable et/ou Ubuntu 14.04 LTS, et de temps en temps OSX 10.9 « Mavericks ». A défaut une machine virtuelle ‘VirtualBox’ peut faire l’affaire.
  • Une carte de développement STM32F4 ‘discovery’ – disponible pour une 15aine d’euros chez Farnell, Radiospares…
  • Un cable USB

Logiciel

Les essentiels de développement

  • Git: sudo apt-get install git
  • GCC 4.6 avec support Ada: sudo apt-get install gnat-4.6
  • Outils divers, bibliothèques: sudo apt-get install build-essential libncurses5-dev

GNAT: le compilateur

(Repris depuis le tutoriel Ada pour STM32)
AdaCore propose depuis quelques semaines un compilateur Ada ciblé pour le STM32 et prêt à l’emploi. Nous ne l’avons pas encore évalué (ça viendra). Nous allons utiliser notre propre variante, basée sur GNAT 2011 pour lego mindstorms.

On va récupérer un script qui va préparer le compilateur et la bibliothèque standard pour nous:

git clone https://github.com/telrob/stm32-ada.git
cd stm32-ada
export CC=gcc-4.6
export INSTALL_PREFIX=$HOME/stm32
make

Suivant votre machine ce processus peut prendre entre 5 minutes et 2 heures.

Programmeur

Le programmeur sert à installer un programme sur la carte. J’utilise ST-Link, d’autres utilisent OpenOCD (j’ai plus d’expérience positive avec ST-Link).

git clone https://github.com/texane/stlink.git
cd stlink
sh autogen.sh
./configure PREFIX=$HOME/stm32
make
make install

Testons

Nous avons installé nos programmes dans [home]/stm32 – pour pouvoir les utiliser nous devons dire à notre shell où tout ça se trouve:
export PATH=$HOME/stm32/bin:$PATH

Les outils devraient être visibles à présent:
which st-flash devrait donner le chemin de st-flash; si ça dit « not found » il y a eu un problème.
which arm-none-eabi-gnat devrait donner le chemin de gnat pour ARM; si ça dit « not found » il y a eu un problème.

Premier programme

Créons un programme vide: test.adb

procedure Test is
begin
loop
null;
end loop;
end Test;

On compile:
arm-none-eabi-gnatmake --RTS=rts-raven test.adb

Et voilà – un beau binaire qui ne fait *rien*.

Au prochain numéro: comment faire quelque chose (ou presque).