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
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:
1 | ...
|
2 | char merker; |
3 | |
4 | int main() { |
5 | merker = 0; |
6 | for(;;) { |
7 | if(merker) { |
8 | tuwas; |
9 | merker = 0; |
10 | }
|
11 | }
|
12 | |
13 | }
|
14 | |
15 | isr() { |
16 | merker = 1; |
17 | }
|
> 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
Hallo Olaf, danke für die Antwort. Wie sieht denn dann der Aufruf aus? Wie übergebe ich die Informationen? Gruss Timo
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
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.