MSP430 Speicherbereich verletzt!

#4032352
Lesenswert?

Hey und hallo zusammen,
habe ein Progrämmchen für meinen MSP430G2553 geschrieben. Irgendwie 
funktioniert es aber nicht richtig. Ich bilde mit ein Pointer richtig 
verwenden zu können, werde aber das Gefühl nicht los, dass ich doch 
irgendwo einen Schnitzer drin habe, weil sich das ding einfach 
verrechnet. Einfache Aufgaben wie
1
if((uint8_t)(signal_[16]) >= (uint8_t)25)
führen zu einem falschen Ergebnis. Manchmal.
Gibt es eine Möglichkeit mit dem "Code Composer Studio" herauszufinden 
wo ich möglicherweise eine Speicherverletzung habe? Oder eine 
schwierige?
Bis zu einer gewissen Programmgröße/ Komplexizität scheint alles gut zu 
laufen.
Gruß
Benni
Gast #4032418
Lesenswert?

Benjamin Johann schrieb:
> werde aber das Gefühl nicht los, dass ich doch
> irgendwo einen Schnitzer drin habe

... und wie soll man das ohne den Code bewerten?

Benjamin Johann schrieb:
> if((uint8_t)(signal_[16]) >= (uint8_t)25)

Ich hoffe, signal ist unsigned deklariert, oder?
Und wozu die cast? Wenn du bei signal[n] nur 8 Bit sehen willst, blende 
die oberen einfach aus
1
if((signal_[16]) & 0x00FF >= 25)
und es liest sich besser.
#4032626
Lesenswert?

Hallo "no cast", hallo Fritz,
Jaja... habt ja recht. Könnte schon etwas großzügiger mit Code sein. 
Aber ich möchte keinen dazu nötigen meine Programme zu berichtigen. 
Deshalb hatte ich die Frage allgemein gestellt. Gibt es eine Möglichkeit 
z.B. über die Pointeradressen zu bewerten, ob man gerade belegten 
Speicher überschreibt?

Zu der Zeile oben: Das Array ist 42 Elemente lang. Alles ist vom Typ 
uint8_t. Wollte durch die Casterei nur sicherstellen, dass der Compiler 
nicht doch irgendeinen "int" vergleicht und so auf ein ungleiches 
Ergebnis kommt. Eher eine Verzweiflungstat.

Gruß
Benni
Gast #4032763
Lesenswert?

Benni J. schrieb:
> Gibt es eine Möglichkeit
> z.B. über die Pointeradressen zu bewerten, ob man gerade belegten
> Speicher überschreibt?

In C geht das nicht. Du kannst einem pointer auf eine beliebige Adresse 
zeigen lassen. Wenn da eine Variable liegt, oder ein andere pointer 
darauf zeigt, überschreiben die sich gegenseitig.
Und C verhindert keine Feldüberschreitung.

Benni J. schrieb:
> Aber ich möchte keinen dazu nötigen meine Programme zu berichtigen.

Du nötigst eher durch rumeierei an Fragen, die sich mit dem Code einfach 
beantworten lassen. :-(((

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren