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


von Marcel K. (viewer)


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

von Stefan E. (sternst)


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.

von Marcel K. (viewer)


Lesenswert?

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

Grüße,
Marcel

von Stefan E. (sternst)


Lesenswert?

> Wie und wo kann man denn die Optimierung ausschalten?

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

von Stefan E. (sternst)


Lesenswert?

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

von Marcel K. (viewer)


Lesenswert?

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

grüße

von Stefan E. (sternst)


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.

von Marcel K. (viewer)


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 (",)

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.