Startproblem mit ATmega128

Gast #763902
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ß
Gast #763907
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]
#763908
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?
Gast #764777
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
#764832
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.