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!!!
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.
Hallo Stefan, erst mal danke für deine schnelle Antwort. Wie und wo kann man denn die Optimierung ausschalten? Grüße, Marcel
> Wie und wo kann man denn die Optimierung ausschalten?
Project -> Configuration Options -> Optimization -> -O0
Ups, ich sehe gerade, dass du zum Compilieren ja Eclipse verwendest. Da kann ich dir nicht sagen, wo das da konfiguriert wird.
Hallo Stefan, doch doch, ich habe gleich gesehen was du meinst!!! Diese Einstellung ist bei mir so schon eingestellt! grüße
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.