Forum: Mikrocontroller und Digitale Elektronik Startproblem mit ATmega128


von brain (Gast)


Lesenswert?

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ß

von Magnus Müller (Gast)


Lesenswert?

> 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]

von Marcus W. (blizzi)


Lesenswert?

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?

von brain (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von brain (Gast)


Lesenswert?

ja das ist nur ein ausschnitt... großen mom

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.