Hallo allerseits. Wir haben ein Problem den ATmega128 ans laufen zu bekommen. Hier auf der Seite bin ich auf das M103 Problem gestoßen. Also haben wir die Fusebits ausgelesen. Der Wert war "1E9702" was laut Datenblatt korrekt ist (S.289). Was mich nur ein bißchen verwundert, ist dass das Ding fabrikneu ist und laut der Beschreibung hier auf der Seite sind neue ATmega128 mit "1E9701" programmiert, also dem 103er Typ. Dies nur als Vorgeschichte... Jetzt hatten wir einige Probleme mit dem Programm und ich weiß nicht, ob dsa grundsätzlisch was mit dem 103er Problem zu tun hat. Irgendwie hat er Probleme, aus manchen Funktionen heraus zu kommen. Das korriose ist, dass das Prog vorher auf einem ATmega16 und auf einem ATmega32 lief. Mein Kollege schrieb: "Ich hab den 128 jetzt ausgiebig getestet und habe auch das Problem mehr oder weniger erkannt. Leider hab ich keinen Plan, wie es zu lösen ist. Die if-Anweisungen mit den verschiedenen Datentypen sind eigentlich kein Problem. Das Problem ist, dass danach die returns nicht mehr klappen, weil der Compiler irgendwie den Stack kaputt optimiert. Ich hab das teilweise durch Ausschalten der Compileroptimierung und Verwendung von goto statt return umgehen können. Eine Lösung um das ganze Programm wieder in Betrieb zu nehmen dürfte das wohl kaum sein?!" Werde schnellstmöglich den Code posten. Vielen Dank an alle die helfen.. Gruß
> Irgendwie hat er Probleme, aus manchen Funktionen heraus zu kommen. Das > korriose ist, dass das Prog vorher auf einem ATmega16 und auf einem > ATmega32 lief. Mein Kollege schrieb: Habt Ihr das Programm mal an den M128 angepasst / neu compiliert? Gruß, Magnetus [Edit] ATmega128 != ATmega16 [/Edit]
brain wrote: Das Problem ist, dass danach die returns nicht mehr klappen, > weil der Compiler irgendwie den Stack kaputt optimiert. > Ich hab das teilweise durch Ausschalten der Compileroptimierung und > Verwendung von goto statt return umgehen können. Eine Lösung um das > ganze Programm wieder in Betrieb zu nehmen dürfte das wohl kaum sein?!" > Wenn die returns zu undefinierten Ereignissen führen, dann liegts meistens an der beschriebenen Fuse. War bei mir exakt das gleiche Problem. Schonmal mit Ponyprog die Fuse ausgelesen? Gruß Edit: Neu compiliert habt ihr ja sicher oder?
Klar! Neu kompiliert ist. @Marcus: Was meinst du mit der beschriebenen Fuse, dh. welches Byte und Bit... trotz allem hier nochmal der Quellcode: ISR(TIMER1_COMPA_vect){ calcPositionX(); TCNT1H=0x00; TCNT1L=0x00; /*Timer nach Compare-Match auf 0 zurücksetzen*/ } int calcPositionX(){ float x_round; if(x_pos>=7)invertDirectionX(); if(x_pos<=0)invertDirectionX(); x_pos=x_pos+x_dir; x_round=x_pos-floor(x_pos); x_display=floor(x_pos); if(x_round>=0.5) x_display++; return 0; } Das Programm läuft bis if(x_round>=0.5) x_display++; durch und bleibt am return 0; hängen. Und es gibt folgende Compiler-Warnung. Severity and Description Path Resource Location Creation Time Id /tmp/ccC0L0Qx.s expression dangerous with linker stubs 128test line 1039 1201399687268 983 Viele (nicht alle) andere return-Anweisungen führen zum gleichen Resultat. bedankt
brain wrote:
> trotz allem hier nochmal der Quellcode:
Das ist vielleicht alles mögliche, aber definitiv kein Quellcode:
1 | TEST.C:1: warning: return type defaults to 'int' |
2 | TEST.C: In function 'ISR': |
3 | TEST.C:2: warning: implicit declaration of function 'calcPositionX' |
4 | TEST.C:3: error: 'TCNT1H' undeclared (first use in this function) |
5 | TEST.C:3: error: (Each undeclared identifier is reported only once |
6 | TEST.C:3: error: for each function it appears in.) |
7 | TEST.C:4: error: 'TCNT1L' undeclared (first use in this function) |
8 | TEST.C: In function 'calcPositionX': |
9 | TEST.C:9: error: 'x_pos' undeclared (first use in this function) |
10 | TEST.C:9: warning: implicit declaration of function 'invertDirectionX' |
11 | TEST.C:11: error: 'x_dir' undeclared (first use in this function) |
12 | TEST.C:12: warning: implicit declaration of function 'floor' |
13 | TEST.C:12: warning: incompatible implicit declaration of built-in function 'floor' |
14 | TEST.C:13: error: 'x_display' undeclared (first use in this function) |
Ein Quellcode läßt sich nämlich compilieren. Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.