Forum: Compiler & IDEs Speicherplatz einer Variable in c++ festlegen


von Warhawk (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.

von Warhawk (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.

von Warhawk (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?


> 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

von Warhawk (Gast)


Lesenswert?

Hi,

das Problem war das der eine Interrupt freigeschaltet war und keine ISR 
definiert war.

Danke nochmal für die hilfe

von Oliver (Gast)


Lesenswert?

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

von Wolfram (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.