MSP430 Speicherbereich verletzt!

OP #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.
OP #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. :-(((
OP #4042630
Lesenswert?
• ▲
▼
Hey Freunde :-)
Habe gerade einen Fehler gefunden. Habe eine mathematische Funktion 
genutzt. Dabei allerdings als Ergebnis nur eine float-Variable 
bereitgestellt. Scheinbar hat mir das den Speicher ordentlich 
durcheinandergewürfelt.

Statt
1
exp()
 benutze ich jetzt
1
expf()

Trotzdem danke fürs zuschauen :-p

Gruß
Benni

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.