Forum: Mikrocontroller und Digitale Elektronik Funktionsaufruf ausklammer erzeugt Fehler (C8051, silabs)


von Otto (Gast)


Lesenswert?

Hallo,

ich möchte hier gar nicht meinen ganzen Sourcecode zeigen, sondern nur 
eine Fehlerbeschreibung geben, welche ich derzeit nicht nachvollziehen 
kann.

Ich benutze einen C8051F580 von Silicon Labs und deren IDE mit Keil 
Compiler.

Mein Sourcecode kann ohne Fehler übersetzt werden. Klammere ich nun 
einen der zentralen Funktionsaufrufe in der while(1)-Schleife mit "//" 
aus und versuche mein Programm erneut zu übersetzen, bekomme ich 21 
Fehler, die vorher eben nicht da waren.

Nach meinem Verständnis kann es durch die Wegnahme von Sourcecode doch 
nicht zu Fehlern kommen, ich entferne doch nur Quellcode? Die Fehler 
sind unter anderem:

- ADDRESS SPACE OVERFLOW
- REFERENCE MADE TO ERRONEOUS EXTERNAL
- PUBLIC REFERS TO IGNORED SEGMENT

Woran kann das liegen?

von Otto (Gast)


Lesenswert?

PS: Die Fehler treten nur auf, wenn ich "Rebuild All" starte. Mit 
"compile current file" kann ich Source-Datei, wo ich den Kommentar 
eingedfügt habe komischerweise übersetzen.

von funkerich (Gast)


Lesenswert?

Otto schrieb:
> Mein Sourcecode kann ohne Fehler übersetzt werden. Klammere ich nun
> einen der zentralen Funktionsaufrufe in der while(1)-Schleife mit "//"
> aus und versuche mein Programm erneut zu übersetzen, bekomme ich 21
> Fehler, die vorher eben nicht da waren.

Eine Frage die nach 10 Sekunden Google geklärt wäre.

Stichwort: Version des eingesetzten C Standards.

von Peter D. (peda)


Lesenswert?

Otto schrieb:
> ich möchte hier gar nicht meinen ganzen Sourcecode zeigen

Es reicht völlig, ihn so zu kürzen, daß der Fehler immer noch auftritt.

Ohne Source einen Fehler in der Source zu finden, ist schlicht ein Ding 
der Unmöglichkeit.

von Otto (Gast)


Lesenswert?

Aber warum erzeugt das Entfernen eines Funktiosnaufrufes einen 
Übersetzungs-Fehler, hingegen keinen, wenn ich diesen drin lasse?

von Falk B. (falk)


Lesenswert?

@Otto (Gast)

>Mein Sourcecode kann ohne Fehler übersetzt werden.

Super.

>Klammere ich nun
>einen der zentralen Funktionsaufrufe in der while(1)-Schleife mit "//"
>aus und versuche mein Programm erneut zu übersetzen, bekomme ich 21
>Fehler, die vorher eben nicht da waren.

Dann hast du möglicherweise eine Klammer zuviel oder zuwenig 
auskommentiert. Das kann vor allem dann passieren, wenn man if() 
Statements ohne Klammern nutzt und die unsichtbare, impliziert 
Strukturebene übersieht. Darum sollte man bei if(), for(), while() IMMER 
mit einer Klammer arbeiten, auch wenn dort nur eine einzige Anweisung 
drinsteht. Das gleiche gilt für Makros, welche Anweisungen enthalten.

von Jim M. (turboj)


Lesenswert?

Otto schrieb:
> Nach meinem Verständnis kann es durch die Wegnahme von Sourcecode doch
> nicht zu Fehlern kommen, ich entferne doch nur Quellcode?

Keil auf 8051 macht Laufzeitanalyse, u.a. für Variablen Overlays.

Wenn da jetzt die Funktionsaufrufe fehlen, belegen lokale Variablen in 
den nicht aufgerufenen Teilen plötzlich eigenen Speicherplatz -> data 
Segment läuft voll.

von Peter D. (peda)


Lesenswert?

Fehlermeldungen dienen ja nicht der Unterhaltung, auch wenn es viele so 
glauben mögen, sie dienen der Information.
Erstmal ist wichtig, welche Instanz den Fehler meldet, ist es der 
Compiler oder der Linker.
Und dann ist eigentlich nur die erste Fehlermeldung wichtig, alles 
andere sind oft Folgefehler.
Insbesondere der Filename und die Zeilennummer bezeichen fast immer die 
Nähe des Bereichs, wo man den Fehler gemacht hat. Leider lassen 
Hilfesuchende diese oft weg und erwarten vom Helfer, daß er sich durch 
den gesamten Code wühlen soll.
Und dann muß man sich nur den exakten Wortlaut in Ruhe durch den Kopf 
gehen lassen.

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.