Quand on développe sur une machine des programmes devant s'exécuter sur une autre machine, on dit que l'on fait du développement croisé. Les outils utilisés dans ce cas s'appelle outils de développement croisés, les outils habituels, ceux qui génèrent des programmes qui devront s'exécuter sur la même machine s'appellent outils de développement natifs.
La machine sur laquelle on fait le développement s'appelle machine
hôte (la station de travail). La machine sur
laquelle s'exécutent les programmes s'appelle machine cible
(le kit 68332).
- édition du programme source.
- assemblage/compilation et édition
de liens .
- exécution du programme sur la
machine.
En développement croisé c'est un peu plus compliqué:
Sur la machine hôte (la station HP):
- édition du programme.
- assemblage/compilation croisé
(génération de code pour processeur 68k de notre
kit)
- édition de liens
adaptée a la machine cible (le kit 68332) et non pour la
machine hôte (la station) !.
Sur la machine cible (le kit 68332):
- récupérer le code
exécutable de la machine hôte (la station).
- lancer l'exécution de ce code.
La machine hôte et la machine cible doivent
être reliés d'une manière ou d'une autre pour
permettre le transférer du code exécutable :
- m68k-linux-gcc : le compilateur
- m68k-linux-as : l'assembleur
- m68k-linux-ld :
l'éditeur de liens
- m68k-linux-ar : gestionnaire
de
librairie
Pour simplifier à l'extrême l'utilisation de ces commandes vous disposez des scripts suivants:
cckit : pour compilerPour assembler le fichier asm.s, il suffit d'utiliser la commande:
assemblage asm.s (avec ou sans extension .s)
Cette commande produit 4 fichiers:
asm.o : contient le code objet translatableMan du script assemblage:
asm.lst: contient la traduction de votre source assembleur en code machine 680X0
asm.map : contient le plan memoire d'implentation de votre code
asm.s29 : est le fichier a telecharger dans la memoire du kit
UTILSATION: assemblage [OPTIONS] FICHIER[.s]
FICHIER:Compiler un ficher source en langage C
fichier contenant le code assembleur 68kOPTIONS:
-k suivit du processeur du kit cible: 68000, 68010, 68030, 68040 ou 68332
le kit par defaut est le 68332-e + adresse (en hexadecimal) d'emplacement du code dans la memoire du kit cible
par defaut elle vaut:
0x800 pour un kit 68000
0xff9000 pour un kit 68010
0x1000 pour un kit 68030
0x10000 pour un kit 68040
0xa000 pour un kit 68332
EXEMPLE:
assemblage -k 68332 -e 0x100 source.s
Il faut utiliser la commande de compilation:
cckit [OPTIONS] fichier[.c]
FICHIER:
fichier contenant le code C
OPTIONS:
-clean efface les fichiers deja
produits
(= commande rm -f *.s29 *.o *.map *.lst)
-e
+ adresse (en hexadecimal) d'emplacement du code dans la memoire du kit
cible
par defaut elle vaut 0x100
-oo ne produit que les fichiers
.o (objet), pour une edition des liens separees
-k suivit du
processeur du kit cible: 68040 ou 68332 le processeur
par defaut est le 68332
Cette commande produit 4 fichiers:
cckit test.c
la cible est un kit 68040
le code doit etre loge a partir de l'adresse
0x1000
test.s
: contient la traduction en memonique assembleur de votre code C
test.o :
contient le code objet translatable
test.map:
contient le plan memoire d'implentation de votre code
test.s29
: est le fichier a telecharger dans la memoire du kit
Le Fichier.lst qui contient le mnémonique assembleur (en correspondance avec le source C ). Le Fichier.map qui est le rapport de l'édition des liens, il contient le mapping d'implantation de votre code dans la mémoire du kit cible. Le Fichier.o est le fichier objet. Le Fichier.s29 est le fichier a télécharger dans la mémoire du kit.
Remarque: cckit ajoute au début de votre programme une section de code nommé startup, qui implémente l'algorithme suivant:
- initialisation de
l'environnement d'exécution
- jsr main (appel de
la fonction main)
- fin du programme: retour
au moniteur du kit.
Votre code est donc placé juste derrière celui du startup.
Vous pouvez le constater en regardent le test.map.
Pour une application comportant des modules en langages C et assembleur 68k
Votre applications comporte des fichiers en langage C et des fichier en langage assembleur, prenons l'exemple suivant:
1 fichier main.c
(qui contient le programme principal en langage C).
1 module fonction.s
(qui contient une fonction ecrite en langage assembleur 68k a appeler
par un programme C).
TRADUCTIONS SÉPARÉES :
a) Compilation des sources C avec la
commande cckit nomfichier et l'option -oo:
info18
4: ls
main.c
fonction.s
info18 5: cckit main -oo
info18 6: ls
main.c main.s
main.o fonction.s
La commande cckit utilisée avec l'option -oo ne produit que les fichiers objet ( main.o) et main.s
b) Assemblage des sources assembleur avec la commande a68 nomfichier et l'option -oo:
info18 6: ls
main.c main.s
main.o
fonction.s
info18 7: assemblage fonction.s -oo
info18 8: ls
main.c
main.s main.o fonction.s fonction.lst
fonction.o
La commande assemblage utilisée avec l'option -oo ne produit que les fichiers objet (fonction.o) et fonction.lst
c) ÉDITION DES LIENS
La commande ldkit permet de lier vos differents fichiers objets (extension .o) et produit un executable pour les kits 68040 uniquement au format srecord (.s29).
L'option permet de préciser le kit cible pour implanter votre code à des adresses compatibles avec la RAM du kit cible et de lui ajouter le bon code de startup. Cette option fait en faite référence a un fichier de commande qui contient les ordres pris en compte par l'éditeur de liens. Ces fichiers de commandes sont Kit68000.k, Kit68010.k, Kit68030.k et Kit68040.k. Ils indiquent a l'éditeur de liens ou placer les différentes sections des code de la mémoire de la machine cible.
Si vous voulez changer l'adresse d'implantation de votre programme ou ajouter une autre librairie (par exemple iofischer10 qui contient les routines pour piloter une maquette Fischer) vous devrez écrire vous même ce fichier de commande. Vous trouverez dans le répertoire /user/info_lib/Kits68k/exemple/LinkCom un exemple (commencer par lire ALIRE).
info18 8: ls *.o
main.o fonction.o
info18 9: ldkit main.o fonction.o -e 0 -o test.s29
L'option -e permet de preciser l'adresse de debut d'implentation du
code dans la memoire du kit cible.
l'option -o permet de preciser le nom du fichier executable au format
srecord
info18 10: ls
executable.*
test.s29
test.map
Il faut respecter les champs séparés par des tabulations:
Étiquette Tabulation Mnémonique
Assembleur Tabulation Opérande
Tabulation ; Commentaire
Ou Directive d'assemblage
Un commentaire situé en début de ligne doit être précédé d'une étoile *, s'il est situé après l'opérande il doit être précédé d'un point-virgule ;. exemple:
BASE | PRÉFIXE | SUFFIXE |
binaire | % | B |
octal | @ | O ou Q |
décimal | aucun | D |
hexadécimal | $ | H (un 0 doit être ajouter devant un nombre hexa d'on le premier caractère ne commence pas par un nombre décimal). |
exemples de constantes numériques:
%1001 = 1001BL'adressage immédiat est indiqué par une dièse #:
@56 = 56O
678290 (base 10 par défaut)
$A2CF9 = 0A2CFH
$4C1D0 = 4C1D0H
MOVE.B #0C3H,D1L'adressage indirect est symbolisé par des parenthèses ( ):
ADD.L (A5),D4 ; Le contenu pointé par A5 est ajouté au
; registre D4
162bug>
162bug>send test40
Chargement du fichier test40.s29
0
1
2
.....
22
fin de chargement
162bug>
162bug>
Le chargement initialise également certain des registres du processeur, en particulier le PC. Donc après un chargement vous pouvez lancer l'exécution directement par un simple go. sinon un go + l'adresse de début du code.