Forum: Compiler & IDEs Compiler/Linker


von Roman S. (kadege)


Lesenswert?

Hallo,
verstehe das Verhalten von avrdude beim Compilieren nicht. Ich habe drei 
c-Files, die per makefile mit "SRC = $(TARGET)" eingebunden werden. 
Ändere ich in einer dieser Dateien etwas, so kommt beim Compilieren eine 
Fehlermeldung ("Variable nicht deklariert"). Was ich nicht verstehe:

- Wenn ich die Änderung zurücknehme (per undo im editor, Tippfehler also 
ausgeschlossen) und das betreffende c-file sowie main.c speichere (beide 
sind in den Zustand VOR der Änderung zurückversetzt), so kommt beim 
Compilieren immer noch die Fehlermeldung, obwohl ich doch die den Fehler 
auslösenden Änderungen rückgängig gemacht habe.

Weiß jemand Hilfe? Danke im Voraus.

von Oliver (Gast)


Lesenswert?

Roman S. schrieb:
> die per makefile mit "SRC = $(TARGET)" eingebunden werden.

Das klingt arg seltsam. kannst du das mal genauer beschreiben?

Oliver

von Roman S. (kadege)


Lesenswert?

Hi Oliver,
dies ist die angesprochene Stelle im makefile, (ich denke, das müßte 
soweit korrekt sein, ich verwende ein makefile und die c-sourcen von Uli 
Radig (mmc-Karten-Bibliothek)):
1
 SRC = $(TARGET).c mmc.c fat.c usart.c

Wie gesagt, das wird anfänglich richtig compiliert, wenn ich aber eine 
Änderung durchführe, gibt es das Verhalten aus meinem ersten posting.
In dem Code sind außerdem includes referenziert.
Die Änderungen waren wie folgt:

Ersetzen dieser Funktion in der Datei "usart.c":
1
void usart_init(unsigned long baudrate) 
2
{ 
3
  //Serielle Schnittstelle 1
4
    //Enable TXEN im Register UCR TX-Data Enable
5
  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);
6
  // 0 = Parity Mode Disabled
7
  // 1 = Parity Mode Enabled, Even Parity
8
  // 2 = Parity Mode Enabled, Odd Parity
9
  //UCSRC = 0x06 + ((parity+1)<<4);
10
  //UCSRC |= (1<<USBS);
11
  //Teiler wird gesetzt 
12
  UBRR=(F_CPU / (baudrate * 16L) - 1);
13
}

durch eine eigene, in der "UCR" nicht vorkommt. Beim Compilieren meckert 
er dann, dass "UCR" nicht deklariert ist (???). Nehme ich die Änderung 
zurück, speichere beide files (main.c und usart.c) und compiliere 
erneut, dann ändert das nichts. Erst, wenn ich die files lösche und sie 
aus dem von der Downloadquelle runtergeladenen Ordner erneut in mein 
Projektverzeichnis kopiere, tut es wieder. Hoffe, meine Schilderung ist 
halbwegs verständlich.

Gruß,
Roman

von Amateur (Gast)


Lesenswert?

Hast Du mal alle Zwischendateien (manchmal *.obj), nach einer Änderung 
und den darauf folgenden schritten zur Neuerstellung gelöscht?

Wenn Du die Originale noch hast, kannst Du damit nicht viel falsch 
machen.

Und dann den Compiler/Linker drauf losgelassen. Ganz wichtig die 
Meldungen nicht nur durchrauschen lassen sondern bestaunen.

Ein weiterer Stolperstein könnte ein vergessener Schreibschutz, bei 
einer der Dateien sein.

von Amateur (Gast)


Lesenswert?

>SRC = $(TARGET).c mmc.c fat.c usart.c

Dieses Konstrukt wird in vielen Makefiles verwendet.

Sollte also gehen.

Wird in der konkreten Zeile auch: "$(TARGET).c" richtig aufgelöst?
Siehe auch Compilerausgabe.

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.