Compiler et debugger un programme est simple. Tellement simple qu'on oublie parfois de le documenter.
Dans le monde de la programmation Ndless, il y a des informations de bases qui manquent.
De ce fait, un débutant peut avoir beaucoup de difficultés pour aborder ces choses.
Je vais donc essayer ici de présenter les éléments de base pour compiler un programme C ou assembleur sous Ndless, ou encore le debugger.
Dans le monde de la programmation Ndless, il y a des informations de bases qui manquent.
De ce fait, un débutant peut avoir beaucoup de difficultés pour aborder ces choses.
Je vais donc essayer ici de présenter les éléments de base pour compiler un programme C ou assembleur sous Ndless, ou encore le debugger.
On part du principe que le lecteur a des connaissances minimales en programmation C ou assembleur selon le cas.
Il faut également avoir déjà compilé des programmes, au moins manuellement.
Enfin pour le debugging, il faut avoir, au moins un peu, pratiqué GDB, le debugger GNU.
Il faut également avoir déjà compilé des programmes, au moins manuellement.
Enfin pour le debugging, il faut avoir, au moins un peu, pratiqué GDB, le debugger GNU.
I - Installation du SDK Ndless:
Il faut utiliser cette procédure
Elle est particulièrement détaillée et précise. Je l'ai utilisée pour ma part sur Mac et sur Linux.
Je n'utilise pas Windows, je n'ai donc pas d'avis à ce sujet.
J'ajouterai juste que:
1 - l'installation est très longue. Elle m'a pris 1/2 journée. Donc prévoyez du temps.
2 - il faut changer le propriétaire du répertoire d'installation Ndless. Ce n'est pas la seule méthode mais c'est celle que je préfère.
Il faut utiliser la commande chown -R utilisateur:goupe ..../Ndless
Dans mon cas, Ndles est installé dans /usr/local. Mon user est nb.
j'ai utilisé sur Mac:
Il faut utiliser cette procédure
Elle est particulièrement détaillée et précise. Je l'ai utilisée pour ma part sur Mac et sur Linux.
Je n'utilise pas Windows, je n'ai donc pas d'avis à ce sujet.
J'ajouterai juste que:
1 - l'installation est très longue. Elle m'a pris 1/2 journée. Donc prévoyez du temps.
2 - il faut changer le propriétaire du répertoire d'installation Ndless. Ce n'est pas la seule méthode mais c'est celle que je préfère.
Il faut utiliser la commande chown -R utilisateur:goupe ..../Ndless
Dans mon cas, Ndles est installé dans /usr/local. Mon user est nb.
j'ai utilisé sur Mac:
- Code: Tout sélectionner
sudo chown -R nb:staff /usr/local/Ndless
Attention, cette commande est dangereuse. Il faut l'utiliser en sachant parfaitement ce qu'on est en train de faire.
I - Compilation d'un programme C
Une bonne solution est de créer un répertoire vide pour travailler sur un projet.
Il faut ensuite y placer son programme C, et éventuellement ses fichiers d'include.
Disons qu'on a créé un programme test.c
Il faut construire le Makefile : nspire-tools new test
Pour compiler, il faut juste taper
Si vous envisagez d'utiliser des bibliothèques particulières comme nspireio par exemple, il faut ajouter
On obtiendra alors le fichier test.tns qui peut être installé sur la TI-Nspire ou l'émulateur Firebird.
On aura également un fichier test.elf qui sera très utile pour debugger. Il contiendra la table des symboles, et permettra de visualiser le code source sous GDB.
Une bonne solution est de créer un répertoire vide pour travailler sur un projet.
Il faut ensuite y placer son programme C, et éventuellement ses fichiers d'include.
Disons qu'on a créé un programme test.c
Il faut construire le Makefile : nspire-tools new test
Pour compiler, il faut juste taper
- Code: Tout sélectionner
make
Si vous envisagez d'utiliser des bibliothèques particulières comme nspireio par exemple, il faut ajouter
- Code: Tout sélectionner
,--nspireio,--gc-sections
On obtiendra alors le fichier test.tns qui peut être installé sur la TI-Nspire ou l'émulateur Firebird.
On aura également un fichier test.elf qui sera très utile pour debugger. Il contiendra la table des symboles, et permettra de visualiser le code source sous GDB.
Voilà, c'est très simple, et généralement plutôt bien documenté.
II - Programmation assembleur
Là la documentation n'est pas facile à trouver.
De la même manière que pour un programme C, il faut avoir un fichier avec l'extension ".S" (en majuscule)
exemple: on a un fichier test.S
il doit commencer par les lignes:
On crée le Makefile:
Dans le cas des TI-Nspire récentes qui ont un écran en 240x320, il faut ajouter " --240x320-support true" à la ligne "ZEHNFLAGS"
Ça évitera les problèmes de compatibilité.
Je préconise également de remplacer la ligne
Il ne reste plus qu'à compiler:
Puis c'est la même chose que pour un programme C en ce qui concerne le ".tns"
Là la documentation n'est pas facile à trouver.
De la même manière que pour un programme C, il faut avoir un fichier avec l'extension ".S" (en majuscule)
exemple: on a un fichier test.S
il doit commencer par les lignes:
- Code: Tout sélectionner
.global main
main:
On crée le Makefile:
- Code: Tout sélectionner
nspire-tools new test
Dans le cas des TI-Nspire récentes qui ont un écran en 240x320, il faut ajouter " --240x320-support true" à la ligne "ZEHNFLAGS"
Ça évitera les problèmes de compatibilité.
Je préconise également de remplacer la ligne
- Code: Tout sélectionner
$(AS) -c $< -o $@
- Code: Tout sélectionner
$(AS) $(GCCFLAGS) -c $< -o $@
C'est à mon avis un petit bug qui n'a pas eu de conséquences pour le plus grand nombre.
Il ne reste plus qu'à compiler:
- Code: Tout sélectionner
make
Puis c'est la même chose que pour un programme C en ce qui concerne le ".tns"
III - debugger un programme avec GDB
Pour debugger avec GDB, il faut avoir installé l'émulateur de TI-Nspire "Firebird".
Voici le mode d'emploi
Par défaut, un serveur écoute sur le port 3333.
Pour utiliser le debugger, il faut d'abord avoir compilé le programme C ou assembleur avec l'option "-g".
Pour faire ça, c'est très simple, il faut indiquer au début du Makefile
Il faut ensuite recompiler le programme à debugger.
Une fois terminé, voici les étapes à suivre:
Pour debugger avec GDB, il faut avoir installé l'émulateur de TI-Nspire "Firebird".
Voici le mode d'emploi
Par défaut, un serveur écoute sur le port 3333.
Pour utiliser le debugger, il faut d'abord avoir compilé le programme C ou assembleur avec l'option "-g".
Pour faire ça, c'est très simple, il faut indiquer au début du Makefile
- Code: Tout sélectionner
DEBUG = TRUE
Il faut ensuite recompiler le programme à debugger.
Une fois terminé, voici les étapes à suivre:
- 1 - lancer firebird-emu
- Code: Tout sélectionner
arm-none-eabi-gdb -ex "target remote :3333" test.elf
2 - charger le snapshot voulu (si nécessaire)
3 - Dans une fenêtre xterm taper:
4 - placer les breakpoints, consulter le source...
5 - c (pour continuer). Le debugger se met en attente.
6 - lancer le .tns sur l'émulateur
7 - le programme s'arrête sur le premier point d'arrêt, puis on debugge comme avec un programme ordinaire.
L'émulateur possède un debugger intégré, je ne l'ai pas utilisé. Il ne nous intéresse pas ici.