Das funktioniert so nicht. Das Problem ist, dass die Makros aus
avr/io.h vom C-Präprozessor aufgelöst werden, der wiederum vor dem
gas-Präprozessor läuft.
gas wiederum erzeugt keine Zwischendatei, wie sie nach
gas-Makro-Auflösung entsteht (was ziemlich blöd ist, wenn man gas-Makros
debuggen will), sondern erzeugt direkt eine Object-Datei, welche das
undefinierte Symbol SPID_CTRL enthält.
Man könnte der undefined reference also per
1 | -Wl,--defsym,SPID_CTRL=0x09c0
|
begegnen, wobei die Adresse dem Header wie z.B. iox64a4.h (für
ATXmega16A4) entnommen werden kann.
1 | #define SPID_CTRL _SFR_MEM8(0x09C0)
|
Das ist aber auch blöd und umständlich.
Am besten sorgst du also dafür, dass "SPID_CTRL" erzeugt wird, bevor
oder während der C-Präprozessor läuft, etwa indem du ein C-Makro
verwendest anstatt eines gas-Makros.