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 !

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 :)