Bonjour,
Après avoir longtemps joué avec l'Arduino, je me suis récemment mis à développez en C sur Atmega328. Mes premiers programmes fonctionnent très bien mais lorsque je les compile j'obtient toujours un message d'erreur m'indiquant que ld.exe "à cessé de fonctionner". (Pour info je suis sous Windows).
Voici un programme qui fait crasher le linker :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <avr/io.h> #include <util/delay.h> #define BLINK_DELAY_MS 1000 int main (void) { // set pin 0 of PORTB for output DDRB |= _BV(DDB0); while(1) { // set pin 0 high to turn led on PORTB |= _BV(PORTB0); _delay_ms(BLINK_DELAY_MS); // set pin 0 low to turn led off PORTB &= ~_BV(PORTB0); _delay_ms(BLINK_DELAY_MS); } } |
Pour compiler j'utilise ces commandes :
1 2 3 4 5 6 | avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o main.o main.c avr-gcc -mmcu=atmega328p main.o -o main avr-objcopy -O ihex -R .eeprom main main.hex echo Compile Done ! |
A chaque compilation, la commande avr-gcc -mmcu=atmega328p main.o -o main
fait planter ld.exe : collect2.exe: error: ld returned 5 exit status
.
Ma version d'avr-gcc est tout simplement celle venant avec l'éditeur arduino (C:\Program Files (x86)\Arduino\hardware\tools\avr\bin
).
Je cherche à régler ce problème, et la première question que je me pose est pourquoi ld.exe est appelé et non pas avr-ld.
Merci d'avance pour votre aide !