Programme de base
Écriture du programme de test
❎ Écrivez en C un programme test le plus simple possible : une fonction main
qui fait une boucle infinie.
Compilation du programme
Pour compiler votre programme, il faut indiquer au compilateur que le processeur cible est un cortex-M4 en mode thumb. Ce qui donne une commande du style :
arm-none-eabi-gcc -c -g -O1 -mcpu=cortex-m4 -mthumb main.c -o main.o`
Comme nous souhaitons en plus tirer parti du FPU pour les opérations flottantes vectorisées, il faut rajouter les options :
-mfloat-abi=hard -mfpu=fpv4-sp-d16
Pour linker votre programme, la commande est du style :
arm-none-eabi-gcc -T ld_ram.lds main.o -o main
❎ Bien entendu, il est hors de question de taper ces lignes à la main. Créez donc un Makefile
, en utilisant les variables et règles implicites adéquates !
Vérification du link
Avant de charger votre programme sur la carte, il est impératif de vérifier qu'il a bien été généré correctement.
❎ Pour cela utilisez objdump
pour vérifier que :
- le point d'entrée est bien en
0x20000000
, - tout l'exécutable est bien logé dans SRAM1 (à partir de
0x20000000
).
Tant que ce n'est pas le cas, ne passez surtout pas à la suite, vous risqueriez de programmer une zone contenant des fusibles et de passer la carte dans un état irrécupérable !
Test du programme de base
❎ Lancez le driver de sonde : make startgdbserver
(cf. pages précédentes).
❎ Dans un autre terminal, lancez le débuggeur en lui passant en argument le fichier ELF généré : arm-none-eabi-gdb main
.
❎ Chargez le programme : flash
.
❎ Mettez-vous en affichage "registres + code assembleur + fenêtre de commande" : split
.
❎ Vérifiez que le PC est positionné à la bonne valeur.
❎ Exécutez votre programme pas à pas (instruction assembleur par instruction assembleur) : si
.
Si tout se passe bien, tant mieux ! Sinon, recherchez la cause de l'erreur en examinant à chaque fois les registres du processeur et en vérifiant que ce qui est exécuté l'est correctement.
Pour sortir de gdb
, tapez quit
ou control-d.
Note : si vous terminal se retrouve dans un mode bizarre après la sortie de gdb
, ne paniquez pas ! Tapez reset
(à l'aveugle si nécessaire) et tout devrait rentrer dans l'ordre :)