www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Startproblem mit ATmega128


Autor: brain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]

Autor: Marcus W. (blizzi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: brain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
brain wrote:
> trotz allem hier nochmal der Quellcode:

Das ist vielleicht alles mögliche, aber definitiv kein Quellcode:

TEST.C:1: warning: return type defaults to 'int'
TEST.C: In function 'ISR':
TEST.C:2: warning: implicit declaration of function 'calcPositionX'
TEST.C:3: error: 'TCNT1H' undeclared (first use in this function)
TEST.C:3: error: (Each undeclared identifier is reported only once
TEST.C:3: error: for each function it appears in.)
TEST.C:4: error: 'TCNT1L' undeclared (first use in this function)
TEST.C: In function 'calcPositionX':
TEST.C:9: error: 'x_pos' undeclared (first use in this function)
TEST.C:9: warning: implicit declaration of function 'invertDirectionX'
TEST.C:11: error: 'x_dir' undeclared (first use in this function)
TEST.C:12: warning: implicit declaration of function 'floor'
TEST.C:12: warning: incompatible implicit declaration of built-in function 'floor'
TEST.C:13: error: 'x_display' undeclared (first use in this function)


Ein Quellcode läßt sich nämlich compilieren.


Peter

Autor: brain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das ist nur ein ausschnitt... großen mom

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.