Hallo liebe Mikrocontroller Nutzer, ich habe ein Problem mit meinem Quellcode (Programmiersprache C). Der Code wird in MPLAB geschrieben und soll für den Mikrocontroller dsPIC40F4011 sein. Ich habe in meinem Quellcode in der main-Datei mehrere If-Abfragen in einer while-Schleife verschachtelt (Anzahl 4). Wenn ich jetzt der letzten if Abfrage die Prüfbedingung gebe, bekomme ich Fehler angezeigt. if(abbruch_anforderung_merker == 1) { } Jetzt wird der Compiler folgende Fehler: build/default/production/Main.o(.text+0x18): In function `.LSM10': : undefined reference to `_fehlerfall_merker' Program Memory [Origin = 0x100, Length = 0x7f00] section address length (PC units) length (bytes) (dec) ------- ------- ----------------- -------------------- .text 0x100 0xd8 0x144 (324) .text 0x1d8 0xa6a 0xf9f (3999) .dinit 0xc42 0x8 0xc (12) Total program memory used (bytes): 0x10ef (4335) 8% Data Memory [Origin = 0x800, Length = 0x800] section address alignment gaps total length (dec) ------- ------- -------------- ------------------- .nbss 0x800 0 0x4e (78) Total data memory used (bytes): 0x4e (78) 3% Dynamic Memory Usage region address maximum length (dec) ------ ------- --------------------- heap 0 0 (0) stack 0x84e 0x7b2 (1970) Maximum dynamic memory (bytes): 0x7b2 (1970) make[2]: *** [dist/default/production/CAN_Communication.X.production.hex] Error 255 nbproject/Makefile-default.mk:207: recipe for target 'dist/default/production/CAN_Communication.X.production.hex' failed make[1]: *** [.build-conf] Error 2 make[2]: Leaving directory 'C:/Users/uschlenk/MPLABXProjects/CAN_Communication.X/CAN_Communication. X' make: *** [.build-impl] Error 2 nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed make[1]: Leaving directory 'C:/Users/uschlenk/MPLABXProjects/CAN_Communication.X/CAN_Communication. X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed BUILD FAILED (exit value 2, total time: 3s) Mit if(1) ... keine Fehler Wodran liegt das bei der ersten IF-Abfrage bekam ich mit zwei Prüfbedingungen auch den Fehler mit einem wieder nicht. Liegt es an der Anzahl an Variablen? Für mich ist das alles sehr mysteriös! if(fehlerfall_merker != 1 /* && (mechanischer_stecker_merker != 1)*/) (Mit den Kommentar kein Fehler, ohne Kommentar makierung Fehler wie oben.
:
Bearbeitet durch User
Es gibt nur Fragen. Die erste: wo ist der Quellcode?
Ich würde mal drauf tippen, daß du den verfügbaren Programmspeicher überschreitest (zuviel Code generiert vom Compiler).
wo denn?
> Ich habe den Quellcode nochmal hinzugefügt
:
Bearbeitet durch User
Der Mikrocontroller ist der dsPIC40F4011 wie oben beschriben. Der ompiler ist der xc16
Hi Uwe, das war nichts. den Code bitte mit Tags versehen!!!! Besser ein kleines komplettes Projekt, oder die C- und h-Files! was sagt denn dein MPLAB zum Fehler 'recipe for target ' das hast doch 3x mal drin???
Durch bearbeiten im Haupteintrag (Erste Eintrag)
Und wo ist der fehlerfall_merker deklariert? Nur im h-File oder gibt es auch ein c-File, das den nicht nur als extern deklariert?
Ich habe die Variablen in einer Header Datei als Extern deklariert. Funktioniert ja auch bei den anderen Variablen. So lange ich die letzte nicht dazu nehme. extern char fehlerfall_merker; // 0 kein Fehler vorhanden; 1 Fehler vorhanden. extern char ladewunsch_merker; // 0 nicht betriebsbereit; 1 betriebsbereit. extern char stecker_merker; // 0 Stecker gezogen, 1 Stecker gesteckt. extern char mechanischer_stecker_merker; // 0 kein mechanischer Stecker gesteckt, 1 mechanischer Stecker gesteckt. extern char betriebsbereit_anzeige; // 0 Betriebsbereit, 1 nicht Betriebsbereit extern char abbruch_anforderung_merker; // 0 kein Abbruch erwünscht 1 Abbruch erwünscht
:
Bearbeitet durch User
Extern bedeutet: die gibt's in irgend einen der gelinkten o-Files (oder Biblioteken). Wenn die aber von dir ist, dann muß es ein c-File geben, in den die OHNE extern steht. Ein guter Kandidat wäre main.c
Oh, dann muss ich mir das nochmal mit dem extern genau durchlesen. Vielen Dank
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.