Вот минимальный фрагмент кода, который мне удалось придумать, который не работает:
Код: Выделить всё
int main() {
unsigned char value = 10;
asm volatile(
"lds r12, %0"
:: "m" (value)
: "r12");
return 0;
}
Код: Выделить всё
> avr-g++ -std=gnu++20 -DF_CPU=20000000L -g -Wall -Wextra -fdata-sections -mmcu=avr128da28 -Os -c mwe.cpp -o mwe.o
> avr-g++ -mrelax -Wl,--gc-sections -mmcu=avr128da28 -Os mwe.o -o mwe.elf
/usr/lib/gcc/avr/16.0.0/../../../../avr/bin/ld: mwe.o: in function `.Loc.3':
.../tests/mwe.cpp:26:(.text.startup+0xc): undefined reference to `Y'
collect2: error: ld returned 1 exit status
Код: Выделить всё
> avr-objdump -s -d mwe.o
...
Disassembly of section .text.startup:
00000000 :
0: 0f 92 push r0
2: cd b7 in r28, 0x3d ; 61
4: de b7 in r29, 0x3e ; 62
00000006 :
6: 8a e0 ldi r24, 0x0A ; 10
8: 89 83 std Y+1, r24 ; 0x01
0000000a :
a: c0 90 00 00 lds r12, 0x0000 ; 0x800000
0000000e :
e: 80 e0 ldi r24, 0x00 ; 0
10: 90 e0 ldi r25, 0x00 ; 0
12: 0f 90 pop r0
14: 08 95 ret
Кто-нибудь видел такую ошибку раньше? Может быть, вы думаете, что моя конфигурация не очень хороша? Или вы думаете, что это действительно может быть ошибка avr-gcc, ld/binutils или avr-libc?
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-linking
Мобильная версия