Compiler Fehler - warum ??

Hallo,
Mein Wetterstationsprojekt ist inzwischen relativ groß geworden (Binäre Sketchgröße: 49.126 Bytes (von einem Maximum von 258.048 Bytes)

Auch S-Ram ist noch genau verfügbar, da ich immer wenn möglich das F Macro nutze.
Nun habe ich ab und an einen Compilerfehler den ich mir nicht erklären kann.

.....
  if (page==1)  client.println(F("<h1>Windst&auml;rke und Luftdruck Statistik</h1>"));
 if (page==2)  client.println(F("<h1>Windrichtung und Au&szlig;entemperatur Statistik</h1>"));
.......

Das hier erzeugt diesen Fehler.

C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\SD\utility\Sd2Card.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\SD\utility\SdFile.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\SD\utility\SdVolume.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\MemoryFree\MemoryFree.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\DCF77\DCF77.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\DCF77\Utils.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\Time\DateStrings.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\Time\Time.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\bmp085\BMP085.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\Wire\Wire.cpp.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\Wire\utility\twi.c.o 
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp\core.a -L
C:\Users\Mein\AppData\Local\Temp\build3835860156763741944.tmp -lm 
d:/arduino-1.5.2/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o: In function `__vector_default':
(.vectors+0xb8): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_46' defined in .text section in d:/arduino-1.5.2/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o

Hier wird abgebrochen mit der Meldung: Fehler beim Kompilieren.

Wenn ich den Code so ändere:

.....
  if (page==1)  client.println(F("<h1>Windst&auml;rke und Luftdruck Statistik</h1>"));
 if (page==2)  client.println("<h1>Windrichtung und Au&szlig;entemperatur Statistik</h1>");
......

läuft es durch - Warum ???
Das Problem habe ich auch an anderen Stellen im Code, manchmal kann ich das F Macro benutzen und manchmal nicht. (Fehler beim Kompilieren.)

Arduino Version ist wie im Log zu sehen 1.0.5.
Wenn das ganze läuft sind um die 2100 Bytes frei (das lasse ich mir anzeigen)
Ich habe schon länger den Verdacht, das mit dem F-Macro was nicht stimmt ??

rudirabbit:
Arduino Version ist wie im Log zu sehen 1.0.5.

Also ich erkenne beim Compiler eher Anzeichen, dass Du die Version 1.5.2 verwendest, denn da steht:

d:/arduino-1.5.2

Die Versionen 1.5.x sind für den Arduino DUE.

Die aktuellste Version für die 8-bit AVR Compiler ist 1.0.5.

Bitte verwende die Version 1.0.5 und nicht 1.5.2, wenn Du kein DUE Board verwendest!

Ansonsten bitte prüfen: Das PROGMEM-Segment darf maximal 64 KB groß werden, entsprechend ca. 1000 Textkonstanten zu je 64 Bytes. Könnte es sein, dass Du mit Deinen in F-Makros verwendeten Textkonstanten an die 64 KB drankommst?

Also ich erkenne beim Compiler eher Anzeichen, dass Du die Version 1.5.2 verwendest, denn da steht:

d:/arduino-1.5.2

Wer lesen kann ist klar im Vorteil - danke

Ich hatte zum Testen eines DUE mal die arduino-1.5.2 Installiert. Aber wieder entfernt, zumindest war ich vorher dieser Meinung.
Das andere System war 1.0.4 das ich auf 1.0.5 upgedatet hatte.

1.0.5 wird mir auch in der Arduino IDE oben angezeigt, wie oder wo wird eingestellt welcher Compiler gelinkt wird ?

Ansonsten bitte prüfen: Das PROGMEM-Segment darf maximal 64 KB groß werden, entsprechend ca. 1000 Textkonstanten zu je 64 Bytes. Könnte es sein, dass Du mit Deinen in F-Makros verwendeten Textkonstanten an die 64 KB drankommst?

Dumme Frage: Wie prüfe ich das :blush: :blush:

Dumme Frage: Wie prüfe ich das

Am einfachsten schaust du erstmal, wie groß der Sketch beim Übersetzen ist:

Binäre Sketchgröße: 466 Bytes (von einem Maximum von 32.256 Bytes)

Da ist kein F-Makro drin, und in einem UNO hast du eh nie mehr als 64 kB :wink:

hi,

probier's mal, indem Du:

  1. einen anderen satz gleicher länge nur mit "aaaaaaa aaaaaaa" usw verwendest.
  2. wenn das geht, tausch beimoriginalsatz wort für wort durch "aaaaa" aus.
  3. wenn ein bestimmtes wort nicht geht, tausch teile des wortes aus.

klingt blöd, aber vielleicht mag das F-makro eine bestimmte buchstabenkombination nicht. das hatte ich mal in turbo-pascal (natürlich nicht mit dem F-makro):

gruß stefan

Danke für eure Hinweise,

Das mit dem Arduino Versionskonflikt schaut nur so aus, der Ordner in dem 1.0.5 installiert ist heißt arduino-1.5.2 keine Ahnung wie das passiert ist.
Drin ist definitv 1.0.5 - habe den Namen geändert um Missverständnisse auszuschließen.

Das ganze ist sehr seltsam, habe die Arduino IDE geschlossen und wieder gestartet.
Jetzt kann ich den Code aus dem Eingangsposting mit F Macro bauen (nichts geändert nur das F wieder hinzugefügt) das soll jemand verstehen.