Forum: Mikrocontroller und Digitale Elektronik Verschachtelung-Tiefe? Begrenzung? C-Programmierung


von Uwe S. (tribe589)


Lesenswert?

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
von Bastler (Gast)


Lesenswert?

Zeile 42 fehlt!

von Uwe S. (tribe589)


Lesenswert?

Bitte eine genauere Erleuterung

von Bastler (Gast)


Lesenswert?

Es gibt nur Fragen. Die erste: wo ist der Quellcode?

von Klaus W. (mfgkw)


Lesenswert?

Ich würde mal drauf tippen, daß du den verfügbaren Programmspeicher 
überschreitest (zuviel Code generiert vom Compiler).

von Uwe S. (tribe589)


Lesenswert?

Ich habe den Quellcode nochmal hinzugefügt

von surreal (Gast)


Lesenswert?

Ich vermute mal es handelt sich um einen PIC16 Typen oder ähnliches?

von Klaus W. (mfgkw)


Lesenswert?

wo denn?

> Ich habe den Quellcode nochmal hinzugefügt

: Bearbeitet durch User
von Uwe S. (tribe589)


Lesenswert?

Der Mikrocontroller ist der dsPIC40F4011 wie oben beschriben. Der 
ompiler ist der xc16

von Stephan (Gast)


Lesenswert?

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???

von Uwe S. (tribe589)


Lesenswert?

Durch bearbeiten im Haupteintrag (Erste Eintrag)

von Bastler (Gast)


Lesenswert?

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?

von Uwe S. (tribe589)


Lesenswert?

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
von Bastler (Gast)


Lesenswert?

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

von Uwe S. (tribe589)


Lesenswert?

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