Forum: Mikrocontroller und Digitale Elektronik SiLabs C8051F930 - IAR Compiler - Problem beim Linken


von Klaus B. (nuccleon)


Lesenswert?

Hi Leute,

ich versuche nun schon den ganzen Tage Assembler Code aus C aufzurufen.
Ich verwende einen C8051F930 Controller von SiLabs.

Assemblieren/Compilieren funktioniert fehlerlos, der Linker jedoch 
bringt mir immer folgende Warnung: "External function "loop" in module 
(file) has no global definition"

Hier mein Code:
1
        NAME loop
2
3
        PUBLIC loop
4
5
        RSEG RCODE
6
7
loop    jmp  loop
8
9
        END

"loop" möchte ich aus C folgendermaßen aufrufen:
1
extern void loop( void );
2
3
void main( void )
4
{
5
   loop();
6
}

Wie gesagt, compilieren und assemblieren funktioniert.
Nur woher kommt diese Linker-Warnung?

Ich hoffe jemand kann mir helfen. - Danke schonmal vorab!

von MC (Gast)


Lesenswert?

>loop    jmp  loop

muss dass nicht

loop:    jmp loop

heißen?

von Klaus B. (nuccleon)


Lesenswert?

> loop:    jmp loop

Funktioniert genau so wenig.

Wie gesagt, Compilieren funktioniert ja. Nur der Linker warnt (kein 
Fehler - und Programm funktioniert auf den ersten Blick auch) mit: 
"External function "loop" in module (file) has no global definition"

von Gerd (Gast)


Lesenswert?

Klaus,

Ich hab von den Silabs mit dem C8051F350 gearbeitet und auf SDCC 
compiliert.
Inline-assembler war etwas hakelig 
(http://sdcc.sourceforge.net/doc/sdccman.html/node82.html) aber ok.
Nehme mal an daß Du den nicht benutzt.

Könntest die Warnung wegdrücken indem Du die externe Funktion als void 
loop(); oder so deklarierst.

Gruß

Gerd.

von Klaus B. (nuccleon)


Lesenswert?

@Gerd: Ich benutze weder Inline-assembler noch den SDCC, sondern den IAR 
Compiler.

Wie bzw. Wo soll ich die Funktion mit void loop(void); deklarieren? 
Diese Funktion ist in einem Assembler Modul und Assembler kennt kein 
void.

Ich habe mir jetzt mal die Beispiele von IAR angesehen, und da tritt die 
selbe Fehlermeldung auf. Allerdings wird in deren Beispielen mit
1
#pragma diag_suppress=w46

Die Warnung einfach unterdrückt :-)

Ich denke ich werde das jetzt auch einfach mal so machen (obwohl in 
meinen Augen sehr unschön).

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
Noch kein Account? Hier anmelden.