www.mikrocontroller.net

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


Autor: Klaus B. (nuccleon)
Datum:

Bewertung
0 lesenswert
nicht 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:
        NAME loop

        PUBLIC loop

        RSEG RCODE

loop    jmp  loop

        END

"loop" möchte ich aus C folgendermaßen aufrufen:

extern void loop( void );

void main( void )
{
   loop();
}

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

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

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>loop    jmp  loop

muss dass nicht

loop:    jmp loop

heißen?

Autor: Klaus B. (nuccleon)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus B. (nuccleon)
Datum:

Bewertung
0 lesenswert
nicht 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
#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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.