Je suis nouveau dans le domaine des microcontrôleurs. Je dois porter un IDE qui compile des programmes pour les microcontrôleurs AVR afin de compiler des programmes pour les microcontrôleurs ARM. Je viens de remplacer le compilateur d’AVR par ARM et d’ajouter quelques options, comme l’a dit quelqu'un . Voici la commande:
\ARM-GCC\bin\arm-none-eabi-gcc -O0 -ffunction-sections -Wall -std=gnu99 -mfloat-abi=soft
-Wa,-adhlns="[email protected]" -fmessage-length=0 -mcpu=cortex-m0 -mthumb -g3 -gdwarf-2 -Wl,
--gc-sections -o <Dir_name>\Build_Files\Blink_arm.cpp.elf <Dir_name>\Build_Files\Blink_arm.cpp.o <Dir_name>\Build_Files\core.a
-L<Dir_name>\Build_Files -lm
Lorsque je l'exécute, l'erreur suivante est générée:
tools/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.6.2\libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text+0x18): undefined reference to `_exit'
collect2: ld returned 1 exit status
Puis-je obtenir de l'aide sur ce qu'est cette erreur et comment puis-je la résoudre? Et aussi je ne sais pas ce que ces options dans la ligne de commande spécifient.
Cela se produit lors de la compilation d'un fichier avec arm-none-eabi-gcc
sur une machine/architecture pour le charger sur une machine cible ARM. Très probablement, vous ne faites pas usage de semi-hébergement, vous voulez recibler.
La chaîne d’outils ARM® Compiler Version 4.1 indique:
Le semi-hébergement est un mécanisme qui permet au code s'exécutant sur une cible ARM de communiquer et utiliser les fonctionnalités d'entrée/sortie sur un ordinateur hôte qui exécute un débogueur.
Dans le fichier readme.txt de la chaîne d'outils (sous le dossier .../gcc-arm-none-eabi-VERSION/share/doc/gcc-arm-none-eabi
):
** non-semi-hébergement/reciblage
Si vous utilisez retarget, créez un lien comme suit: $ arm-none-eabi-gcc --specs = nosys.specs $ (OTHER_LINK_OPTIONS)
Pour moi, --specs=nosys.specs
était suffisant;)
Utilisez --specs=nosys.specs
:
arm-none-eabi-gcc --specs=nosys.specs $(OTHER_LINK_OPTIONS)
Référence:
J'ai eu le même problème ... La solution était la suivante:
-ffreestanding -flto
dans la ligne d’appel du compilateur. -flto -ffreestanding -nostdlib
dans la ligne d’appel de l’éditeur de liens.