mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit meinem Programm! Stackproblem??


Autor: Marcel K. (viewer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen,
ich habe ein Problem mit meinem Programm. Ich bin gerade dabei ein 
Display zum laufen zu bekommen. Ich habe früher mir IAR gearbeitet und 
zu dieser Zeit hat das Programm auch funktioniert. Jetzt bin ich auf 
Eclipse umgestiegen und muss einiges umschreiben und auch ergänzen (also 
neue Codeteile).

Ich zeige mal meine main.

int main(void)
{
  wdt_disable();
  sei();
  init_controller();

  init_uart();

  init_t6963c();

  while (1)
  {
    //uart_putchar('A');
  }

Es ist so, wenn ich die „init_uart()“ mit „//“ auskommentiere, dann 
bleibt das Programm beim debuggen bei „init_t6963c() stehen. Das ist ja 
soweit richtig. Wenn ich „init_uart()“ mit „//“ auskommentiere bleib das 
Programm auch schön bei „init_t6963c()“ stehen. Soweit war alles OK. 
Wenn ich allerdings beide drin lasse, debugge und dann das Programm 
anhalte, steht das ganze bei einer Funktion die gar nicht aufgerufen 
werden kann. Und das ganze immer an der gleichen Stelle.
Bei IAR hatte ich das Problem auch schon mal und dann habe ich den 
CSTACK und den RSTACK etwas erhöht. Dann ging wieder alles.
Mein Problem ist jetzt das ich nicht weiß wie ich den Fehler finden 
kann. Ich bin noch Anfänger mit dem Umgang mit Eclipse. Kann ich 
irgendwie herausfinden ob es einen Art „Stacküberlauf“ oder ähnliches 
gab?

Zum debuggen verwende ich AVR Studio4.0. Ich habe mein Code nicht hier 
gepostet da ich nicht glaub, dass es ein Fehler im Code gibt. Ich habe 
eher das Gefühl es ist eine einfache Einstellungssache ist.
Es ist auch so das ich, wenn ich beide Funktionen drin lasse, das 
Display normal initialisiert wird (es erscheint ein Text auf dem 
Display).
Bevor ich den Fehler etwas einkreisen konnte habe ich beide Funktionen 
ganz normal ausgeführt. Das Display hat auch den gewünschten Text 
ausgegeben aber als beim debuggen das ganze angehalten habe, habe ich 
erwartet dass das Programm in der main stehen bleibt da ja alles 
ausgeführt wurde. Aber wie erwähnt da blieb das Programm nicht stehen. 
Wie als würde der Controller einen Reset machen oder ähnliches.

Hat eventuell einer hier aus dem Forum eine Idee woran das liegen 
könnte?

Viele Grüße und ein schönes Wochenende,

Marcel


PS:
Ich habe eben noch mal den UART-Print in der Schleife aktiviert und dann 
bleibt das Programm wirklich nur in der UART-Funktion stehen, so wie es 
auch sein sollte. Sehr merkwürdig!!!

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist kein Fehler im Programm, sondern nur ein Anzeigeproblem des 
Debuggers. Durch die Optimierungen geht der direkte Zusammenhang von 
C-Code und Assembler-Code verloren, so dass der Debugger ins Stolpern 
kommt, wenn man durch den C-Code steppt. Wenn du einfach nur mal deinen 
Code im Debugger sehen willst, und nicht tatsächlich Debuggen willst 
(und darum geht es dir ja wohl, denn das Programm geht ja schließlich, 
wenn ich es richtig verstanden habe), dann schalte die Optimierungen ab. 
Wenn du tatsächlich Debuggen willst, dann steppe durch den 
Assembler-Code, nicht durch den C-Code.

Autor: Marcel K. (viewer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,
erst mal danke für deine schnelle Antwort.
Wie und wo kann man denn die Optimierung ausschalten?

Grüße,
Marcel

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie und wo kann man denn die Optimierung ausschalten?

Project -> Configuration Options -> Optimization -> -O0

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, ich sehe gerade, dass du zum Compilieren ja Eclipse verwendest. Da 
kann ich dir nicht sagen, wo das da konfiguriert wird.

Autor: Marcel K. (viewer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,
doch doch, ich habe gleich gesehen was du meinst!!! Diese Einstellung 
ist bei mir so schon eingestellt!

grüße

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du AVR-Studio aber nur zum Debuggen verwendest, ist die 
Optimizer-Einstellung dort (mein Post oben) völlig ohne Wirkung. Es geht 
schließlich darum, wie der Code compiliert wird. Dort ist die 
Optimizer-Einstellung von Interesse.

Autor: Marcel K. (viewer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde mich noch mal schlau machen. Ich habe jetzt mal das Studio 
einfach beendet und hab mir eine Denkpause gegönnt. (Rechner m 
Standbymodus)
Als ich mich wieder an den Rechner gesetzt hatte und dann Studio4.0 
wieder neu gestartet habe, ging alles plötzlich wie erwartet!!!!

Sowas komisches...

Naja auf jeden Fall vielen Dank für deine Hilfe!!

Danke und ein schönes Wochenende.

Grüße aus der Nähe Heidelberg,
Marcel (",)

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.