www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Probleme mit KPIT Gnu Compiler für M32C


Autor: Timo (Gast)
Datum:
Angehängte Dateien:

Hallo zusammen,

ich verwende den GNU Compiler von KAPIT zur Programmierung unserer
M32C87 Prozessoren von Reneas. Ich möchte gerne aus einer Interrupt
Service Routine ein Unterprogramm aufrufen. Ich habe die Header Datei,
in der das Unterprogramm definiert ist eingebunden. Kompilieren kann ich
das Projekt. Der Linker sagt mir jedoch: undefined reference to 'mem0'.

Es ist übrigens völlig egal, ob ich Quellcode im Unterprogramm stehen
hab oder nicht. Das Linken funktioniert erst dann, wenn ich das
Unterprogramm auskommentiert habe.

Hat einer von euch ne Idee woran das liegen könnte? Ich hab mal ein
Testprogramm angehänt, in dem der Fehler auftritt.

MfG
Timo
Autor: Nils S. (Firma: SpectraLight MM) (kruemeltee) Benutzerseite
Datum:

Wegen undefined reference... Hab ich keine Ahnung, aber normalerweise
ruft man aus der ISR nichts auf.

Du bastelst dir eine Merker-Variable, die in der ISR gesetzt wird. In
der Hauptschleife wird die Variable abgefragt und jenachdem ob sie
gesetzt ist, ausgeführt.

Beispiel:
...
char merker;

int main() {
    merker = 0;
    for(;;) {
        if(merker) {
            tuwas;
            merker = 0;
        }
    }

}

isr() {
    merker = 1;
}
Autor: Olaf (Gast)
Datum:

> Ich habe die Header Datei,
> in der das Unterprogramm definiert ist eingebunden.

Das ist schoen, dann weiss dein Compiler also bereits wie deine Funktion
heisst und welche Typen sie erwartet/liefert.

> Der Linker sagt mir jedoch: undefined reference to 'mem0'.

Dann hast du vergessen dem Linker zu sagen in welchem Objectcode sich
deine Funktion befindet. Du muss ihm diese Information beim Aufruf
uebergeben.

Olaf
Autor: Timo (Gast)
Datum:

Hallo Olaf,
danke für die Antwort. Wie sieht denn dann der Aufruf aus? Wie übergebe
ich die Informationen?
Gruss Timo
Autor: olaf (Gast)
Datum:

Im letzen Aufruf des gcc muss irgendwo foo.o mit drin stehen. Also der
Code den dein Compiler irgendwann mit deiner Funktion vorher erzeugt
hat. Das traegt man normalerweise irgendwo im Makefile ein. Jedenfalls
falls du ein Makefile benutzt.

Olaf

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net