ARM – Environnement de développement & 1er programme en assembleur.

ARM – Environnement de développement & 1er programme en assembleur.

ARM_1

STM32L053Discovery

Voici quelques temps que j’ai reçu une carte STM32L053Discovery. Au début, tout était pour le meilleur des mondes alors que je pouvais utiliser l’IDE d’IAR en version démo, ainsi que les librairies fournies par STMicroelectronique. Mais voici que le temps de test de l’IDE est arrivé à son terme, et les possibilités viennent à se réduire pour programmer cette carte sans avoir à ouvrir le porte monnaie. De plus, comme l’utilisation des librairies vient souvent grossir les binaires, je me suis lancé dans l’idée de retourner aux sources et de programmer ce microcontrôleur avec le strict minimum. Alors pourquoi ne pas réapprendre les bases de cette architecture, ainsi que celles de la programmation embarquées « Bare Metal ».

Pour se lancer dans l’aventure, il nous faut un « toolchain », ou suite de logiciels à cette effet. Grâce au projet GNU et aux gars de chez ARM qui maintiennent cela à jour, nous avons tout ce qu’il nous faut. Mais comme j’aime travailler sous Windows (et oui, mauvaise habitude…) il nous faudra aussi un autre programme : Make.

Commençons par installer la suite de logiciels « Pre-built GNU toolchain from ARM Cortex-M & Cortex-R processors (Cortex-M0/M0+/M3/M4/M7, Cortex-R4/R5/R7) »: lien. Récupérez la dernière version en *.exe et tout devrait se passer à merveille …. et sauf raisons personnelles, cochez toutes les cases lors de la dernière fenêtre, ainsi, les commandes seront accessible globalement.

Testons l’installation par la commande :

arm-none-eabi-as -v

Vous devriez obtenir une reponse du type :

GNU assembler version 2.24.0 (arm-none-eabi) using /
BFD version (GNU Tools for ARM Embedded Processors) /
2.24.0.20141128

Pour tester le compilateur, il nous faut de quoi compiler. Alors faisons un petit programme en assembleur a sauvegarder dans main.s (*.s pour assembleur):

         @ main.s
         .section .text
         .globl main

main:    mov   r0, #5        @ on met la valeur 5 dans R0
         mov   r1, #4        @ on met la valeur 4 dans R1
         add   r2, r1, r0    @ on additionne R0 et R1 dans R2
                             @ et on bloque le programme
emain:   b     emain         @ dans une boucle infinie

Vraiment simple, mais disposant d’instructions afin de voir l’effet en mémoire, cela sera nécessaire et suffisant pour tester le compilateur. lançons la commande de compilation :

arm-none-eabi-as -o main.o main.s

Cela devrait creer un fichier main.o, et si vous l’ouvrez, vous devriez voir :

7f45 4c46 0101 0100 0000 0000 0000 0000
0100 2800 0100 0000 0000 0000 0000 0000
9400 0000 0000 0005 3400 0000 0000 2800
0800 0500 0500 a0e3 0410 a0e3 0020 81e0
...

Le compilateur fonctionne !!! Profitez de ce moment de joie …

Et passons à la suite …

Toujours avoir a entrer les commandes peut devenir fastidieux, ainsi il nous faut utiliser un makefile afin de centraliser les commandes et le logiciel Make pour l’exécuter.

Installons Make : lien, l’installation par défaut devrait bien fonctionner. Pour vérifier l’installation, faites :

make -v

Vous devriez obtenir :

GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-pc-mingw32

Youhouuuu, l’environnement est complet, et ça compile !!!!

je vais m’arrêter là pour ce soir, et pour les prochains posts, je regarderai le makefile et le linker pour aboutir a un code fonctionnel a charger dans le microcontrôleur … si tout va bien :D

see yaaaaaaaa