Forum: Digitale Signalverarbeitung / DSP / Machine Learning TI DSP TMS320f RAM Speicher loeschen mit Pointer


von michi02 (Gast)


Lesenswert?

Hallo, ich habe den TI DSP 320f2812

 Ich möchte nach jedem neustart des DSP seinen Ram speicher löschen. 
Eine Löschen mit dem Linker fällt somit flach.

Ich habe mir gedacht direkt nach dem Programmstart lasse ich einfach 
einen Null Pointer über den gesamten Ram laufen und lösche so den RAM. 
Jetzt brauche ich für die Pointeradresse eine Variable die auf an der 
ersten Speicheradresse eines RAM speichers liegt. Dann kann ich ja den 
Pointer dorthin zeigen lassen und immer weiter wandern lassen.

Jetzt die Frage wie lege ich am besten eine Variable an die auf die 
erste Adresse eines RAM Speichers zeigt?

vielen dank für eure Tipps

Michi

von Micha (Gast)


Lesenswert?

Was willst du denn damit erreichen, sprich: warum willst du den RAM 
löschen? Beim Starten steht doch (quasi) nichts drin.

von michi02 (Gast)


Lesenswert?

Na wenn der Watchdog anschlägt startet das Programm neu und auch da 
sollte der RAM leer sein. Was hier nicht unbedingt der Fall ist. Globale 
Variablen werden ja auf dem RAM abgelegt und damit ich sie nicht alle 
explizit 0 setzen muss wäre es halt schon schön...

von Micha (Gast)


Lesenswert?

Wieviele globale Variablen sind es denn? Es lässt sich bestimmt auch 
erkennen ob der Watchdog ausgelöst hat und du könntest die Variablen nur 
dann löschen.

Abgesehen davon musst du sie doch vor der ersten Verwendung sowieso 
initialisieren!?

Aber ok:
sieh dir mal spra958h an - kann sein, dass dir das hilft und du es ein 
bisschen zweckentfremden kannst.

Wobei ich ein paar Zweifel habe, dass das funktioniert wie du dir das 
vorstellst, sprich wenn du alles löschst. Könnte sein, dass du dir da 
was zerschiesst.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Das Ram ist nicht nur nach einem Watchdogreset nicht auf null gesetzt, 
sondern auch nach Wiederkehr der Stromversorgung in undefiniertem 
Zustand. Eine Initialisierung der Variablen ist immer notwendig.

Manche C-Compiler initialisieren alle Variablem bei der Deklararation 
grundsätzlich auf 0, manche aber auch nicht.

In diesem Fall definiere und deklariere ich die Variablen dann so:

int var1 = 0;
int arr1[5] = {0,0,0,0,0};

Dann kann man sich aussuchen, welche Variablen initialisiert werden und 
welche nicht. So kann man unterscheiden, ob der Reset vom Watchdog 
gekommen ist, oder durch einen Stromausfall.

Unabhängig davon muss es aber schon funktionieren, alle Ramadressen 
direkt per Pointer anzusprechen und auf Null zu setzen. Man darf nur 
nirgendwo reinschreiben, wo kein Rambereich ist. Manche Bereiche vom Ram 
im TMS320 müssen auch erst freigeschatet werden, bevor man sie schreiben 
kann.

Grüße,

Peter

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.