Hallo, ich such eine möglichkeit beim ATMega32 eine Möglichkeit unter c++ selber festzulegen wo eine Variable im SRAM abgelegt werden soll oder eine Möglichkeit sich einpaar Byte im RAM zu reservieren wo der Compiler keine Variablen ablegt. Ich benutze WinAVR 20060421. Danke schonmal im Vorraus.
Grundsätzlich ist das möglich. Aber es ist heavy hacking stuff ;-) Du kannst ein eigenes Linkercontrolscript anlegen und dort eine eigene section definieren z.B. vor oder nach der .data + .bss section. Die Linkercontrolscripte findest du bei winavr\avr\lib\ldscripts Aber warum willst du das machen? Ich behaupte in den meisten Fällen, wo so eine Lösung in Betracht gezogen wird, gibt es auch andere Lösungen.
Hallo, das Problem was ich aktuell hab ist folgendes, ich habe ein kleines Programm zur Kommunikation mit dem PC geschrieben (über die USART). Das Programm funktioniert solange ich das Programm mit im Auto-Step Durchlaufen lass, aber sobald ich den Controller ganz "normal" (mit oder ohne JTAG) laufen lass macht der Controller nur noch schei***. Wenn ich das Programm nach dem ersten übertragungsfehler anhalte stehn in manchen Variablen Werte drin die eigentlich nicht entstehen dürften. Ich hat jetzt die Vermuttung das vielleicht eine Byte im SRAM vielleicht was weg hat und wollte so mal nachprüfen es dran liegt, bzw. funktioniert wenn ich die Variable an eine andere Adresse verschieb. Ich hab alle Interrupts gesperrt die ich nicht brauch und die die ich verwende sind auch nur dann frei geschalte wenn ich sie brauch.
Du vermutest also ein defektes SRAM. Dafür würde ich den Aufwand mit eigenem Speicherbereich nicht treiben. Ich würde entweder den µC austauschen oder den Code auf Variablen-/Buffer-/Stackoverflows kontrollieren. Es gibt da verschiedene Verfahren vom Scharfdrüberkucken bis zum Begrenzen von Variablenabschnitten mit Magic-Variablen. Bei der Kontrolle können wir im Forum helfen, wenn du den Quellcode angibst.
Hallo, mit den Magic-Variablen versuch ich dann gleich mal, ich hab den quellcode jetzt noch schnell einwenig kommentiert und ne kleine Excel Tabelle geschrieben die das Protolkol erklärt. Wenn jemand mal drüber schauen könnte währe das super. Am SRAM liegts definitiv nicht, ich habs nochmal auf einem ATMega16 getestet und da ist das gleiche. Wie schon erwähnt läuft das Programm einwandfrei solang ich im Auto-Step durch geh oder auch per Hand schritt für schritt. Sobald der µC einfach läuft ohne das der Debuger eingreift funktioniert fast nix mehr. In der Execel Datei ist auch das beispiel was Aktuell übertragen werden soll. Das Projekt ist aktuell auf eine ATMega16 mit 11.0592MHz und 9600 Baute eingestellt. Vielen Dank schon mal für die viel Mühe
Ich sehe nix unmittelbar kritisches. Ich würde eine Prüf- und Warnfunktion auf die Indexvariablen p_iRZaehler und p_iSZaehler einfügen. Es ist auch guter Programmierstil Variablen zu initialisieren. Soweit ich sehe, muss p_iRZaehler auf 1 initialisiert werden. Derzeit initialisiert der Startupcode automatisch auf 0, das kann bei "//Sende Datensätze" knallen.
Also, ich habs mal durch vmlab gejagt. Das "stürzt" ab, weil du in EvalRecData(void) mit
1 | UCSRB |= ((1<<TXCIE)|(1<<UDRIE)); |
den TXCIE freigibst, aber keine ISR dafür hast. Ob das im richtigen Leben auch das Problem ist, wer weiss? Oliver
> Wenn ich > das Programm nach dem ersten übertragungsfehler anhalte stehn in manchen > Variablen Werte drin die eigentlich nicht entstehen dürften. Dann hat der Programmierer entweder einen Zeigerfehler programmiert, oder dir ist der Speicher ausgegangen. Olaf
Hi, das Problem war das der eine Interrupt freigeschaltet war und keine ISR definiert war. Danke nochmal für die hilfe
Und ich träume immer noch von einem JTAG-Adapter, aber wenn der solche Fehler nicht findet, lohnt das viele dafür Geld ja wohl nicht. Oliver
>Und ich träume immer noch von einem JTAG-Adapter, aber wenn der solche >Fehler nicht findet, lohnt das viele dafür Geld ja wohl nicht. War das Ironie? Ein JTAG nimmt einem auch nicht das Denken ab. Bezüglich "viele Geld" für den AVR kann mann sowas für 10 Euro nachbauen und inzwischen für 50-60 Euro kaufen.
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.