Hallo, ich möchte eine Assembler-Funktion in C-Code (AVR-GCC) einbinden. Die Assembler Datei sieht so aus und ist unter uart.S gespeichert: #include "avr/io.h" .extern data .global UART_Receive .func UART_Receive UART_Receive: 1: sbis _SFR_IO_ADDR(UCSR0A), _SFR_IO_ADDR(RXC0) rjmp 1b in 17, _SFR_IO_ADDR(UDR0) ret .endfunc .end Im Makefile wird diese Datei mit: ASRC = uart.S eingebunden. Im C-Code wird die Funktion UART_Receive als extern deklariert und dann ganz normal aufgerufen. Wenn ich compilieren will, kommt folgende Fehlermeldung: undefined reference to `UART_Receive' Was mache ich falsch?? Vielen Dank schon mal für eure Hilfe!!!
Du must auch die entstehende uart.o linken. Vermutlich ist es auch nicht das beste, die Funktion als extern zu deklarieren, also einfach void UART_Receive( void );
Diese Assemblerdatei hat einen Fehler und es wird keine Objektdatei erzeugt. Deswegen findet der Linker auch die Funktion nicht. Ohne Gewähr - Probiere mal
1 | #include "avr/io.h" |
2 | .extern data |
3 | .global UART_Receive |
4 | .func UART_Receive |
5 | UART_Receive: |
6 | 1: |
7 | // sbis _SFR_IO_ADDR(UCSR0A), _SFR_IO_ADDR(RXC0) |
8 | sbis _SFR_IO_ADDR(UCSR0A), RXC0 |
9 | rjmp 1b |
10 | in 17, _SFR_IO_ADDR(UDR0) |
11 | ret |
12 | .endfunc |
13 | .end |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.