Soved: ATtiny85 Fehler beim Kompilieren

Hallo Leute,

ich bastle seit einiger Zeit an einer Servoelektronik auf Basis eine ATtiny85.
Der Sketch besteht aus verschiedenen Funktionen, die alle einzeln getestet wurde und laufen.
Der komplette Sketch läßt aber nicht kompilieren, und zwar auf eine sehr seltsame Weise:
Der angehängte Sketch läßt sich kompilieren.
Aber in Zeile 184 in der Zeile “unsigned long Pulse = (Flanke2-Flanke1);” muß noch die Pulsdauer durch 64 geteilt werden, weil ich den Timer0 umgestellt habe um 32kHz PWM zu bekommen. Deshalb laufen alle Timer 64mal so schnell.

Sobald ich aber in Irgendeiner Form diesen Wert dividiere, bekomme ich die Fehlermeldung:

c:/temp/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn85.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/temp/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o)

ich habe schon probiert:

unsigned long Pulse = (Flanke2-Flanke1)>>6;
unsigned long Pulse = (Flanke2-Flanke1)/64;

unsigned long Pulse = (Flanke2-Flanke1);
Pulse = Pulse >> 6;

Was ich sonst noch probiert habe: die ATtiny zip neu runtergeladen, die IDE neu installiert.

und viele andere Varianten. Ich habe auch schon versucht, an der Stelle, an der die Funktion aufgerufen wird, den Wert zu dividieren.
Es führt immer zum gleichen Ergebnis. Sobald ich das Signal irgendwo im Sketch anfassen, krieg ich diese Fehlermeldung!
Und wenn ich eine der anderen Funktionen rausnehme, dann kompiliert er auch fehlerfrei.

Was habe ich:
ATtiny85 mit UNO als ISP, ausgewähltes Board: ATTINY85 (internal 8MHz clock)
Das funktioniert ja auch alles. (wenn ich die Divison weglasse)

ATtiny anleitung so wie High-Low Tech – Programming an ATtiny w/ Arduino 1.6 (or 1.0) und auch von dort die verlinkte ATtiny MAster.ZIP.
IDE 1.0.5-r2

Im Anhang der Code der funktionert, der Code, der nicht funktioniert und das ausführliche Compilerlog.
Hat einer eine Idee?

ATtiny_Servoregler - geht.ino (6.35 KB)

ATtiny_Servoregler - mit Fehler.ino (6.35 KB)

ATtiny_Servoregler.ino.CompilerLog.txt (24.7 KB)

Würde es sich anbieten, bei dir mit float-Zahlen zu arbeiten?
(Flanke1+Flanke2)*0,015625

Dein "fehlerhafter" Sketch compiliert bei mir für den ATtiny85 ohne Probleme. Da ich nicht Windows benutze, vermute ich die Probleme mal dort bzw. bei der Windows-Version des Compilers. Allerdings verwende ich das Arduino-Tiny Projekt (Google Code Archive - Long-term storage for Google Code Project Hosting.), obwohl ich bei dem bei Dir aufgetretenen Fehler eher auf den Compiler als die Board-Definition tippe.

Habe auch mal eben den ATtiny85 auf dem Steckbrett aufgebaut und mit USB ISP Progger versucht, bekomme das Problem ebenfalls.

unsigned long Pulslang(){
  if (!ISR){
    noInterrupts();
    unsigned long Pulse = (Flanke2-Flanke1);
    unsigned long PulseNeu = Pulse *0.015625;
    interrupts();
    ISR = true;
    return PulseNeu;
  }
  return 0;
} // end Pulslang

So klappt es leider auch nicht. Ich kann return Pulse ohne Probleme zurückgeben. Sobald ich aber return PulseNeu zurückgeben möchte, bekomme ich das Problem. In der loop kann ich den Rückgabewert von pulslang = Pulslang(); auch nicht verändern.

sschultewolter:
Würde es sich anbieten, bei dir mit float-Zahlen zu arbeiten?
(Flanke1+Flanke2)*0,015625

Hatte ich auch schon probiert.
Nützt aber nix.

pylon:
vermute ich die Probleme mal… bei der Windows-Version des Compilers.

Das ist auch meine Vermutung, denn der Code an sich, in anderer Zusammenstellung, compiliert und läuft.
Ich habe nur keine Idee mehr, wo ich ansetzen soll!

pylon:
Allerdings verwende ich das Arduino-Tiny Projekt (http://code.google.com/p/arduino-tiny/),

Ist das compatibel?

sschultewolter:
So klappt es leider auch nicht…Sobald ich aber return PulseNeu zurückgeben möchte, bekomme ich das Problem. In der loop kann ich den Rückgabewert von pulslang = Pulslang(); auch nicht verändern.

Das beruhigt mich dahingehend, dass ich wohl nicht zu doof war. Jetzt brauche ich nur noch eine Lösung…

Habe eine Lösung für dich vielleicht gefunden.

http://forum.arduino.cc/index.php/topic,60649.0.html

Hab es noch nicht getestet, könnte ich erst nachher machen.

Stefan, ich werds probieren. Danke

Es hat funktioniert!

Jetzt kompiliert er!

Stefan, fühle dich geknutscht! :*

Und das Karma möge mit dir sein.