Forum: Mikrocontroller und Digitale Elektronik MSP430FR2355


von Walter L. (charly2)


Lesenswert?

Hallo,

das Array

static const unsigned char OELSTAND[2048];

im MSP430FR2355
wird in der Entwicklungsphase (CCSV10) beim Laden des Programms mit NULL 
überschrieben.

Weiß jemand, wie man das abschalten kann?

VG Walter

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

"...static storage duration. The storage duration is the entire 
execution of the program, and the value stored in the object initialized 
only once, prior to main function..."

"...If a static or thread-local (since C++11) variable is 
constant-initialized (see below), constant initialization is performed 
instead of zero initialization before all other initializations..."

- https://en.cppreference.com/w/c/language/initialization
- https://en.cppreference.com/w/c/language/storage_duration
- https://en.cppreference.com/w/cpp/language/constant_initialization

Du solltest dir eventuell mal überlegen für was du diesen 
Schlüsselwortsalat genau drin haben willst und was du eigentlich 
erreichen willst...

von Walter L. (charly2)


Lesenswert?

>was du eigentlich erreichen willst...

Ich will erreichen, dass der definierte FRAM-Bereich (z.B. 0x8000 bis 
0x8800) beim Laden des Programmes durch den CCSV10 nicht überschrieben 
wird.
Der FRAM-Bereich von 0x1800 bis 0x1A00 bleibt beim Laden des Programmes 
durch den CCSV10 erhalten.

von Clemens L. (c_l)


Lesenswert?


von Walter L. (charly2)


Lesenswert?

@Clemens Heißer Tipp. Danke.
Ich tausche in
#pragma PERSISTENT(var)
unsigned long var=0;

SYSCFG0 = FRWPPW | DFWP;            // Program FRAM write enable
var++;                             // Increment the variable (aka, treat 
it like any other variable)
SYSCFG0 = FRWPPW | PFWP | DFWP;


das unsigned long var=0;
mal in
unsigned char OELSTAND[2048];
aus.....
Schaun wir mal.

von Walter L. (charly2)


Lesenswert?

Es wird weiterhin überschrieben....
Es fkt also nicht.
Es muss noch etwas im .cmd-File geändert werden.
Was, ist mir noch nicht klar.

von Walter L. (charly2)


Lesenswert?

Das Fenster
Step 2: Change Erase Options
in 
https://community.element14.com/members-area/personalblogs/b/blog/posts/msp430fr2633-saving-fram-when-uploading-code
finde ich nicht im CCSV10 , gibt es nicht.

#pragma NOINIT legt mir die var immer nach 0x2000, da ist das RAM ... 
auch wenn ich den cmd ändere.

von Walter L. (charly2)


Lesenswert?

Hallo,

nun funktioniert es.
Die Lösung:
Im C-Programm
#pragma NOINIT(OIL_Level)
volatile unsigned char OIL_Level[2048];
einfügen
im Linker.cmd zeile 139
.TI.noinit  : {} > RAM
in
.TI.noinit  : {} > FRAM
ändern
in "Project->Properties->Debug->MSP430 Flash->Erase Options"
Schalter
"Replace written ...."
on.

Herzlichen Dank für die Hilfe.

Mit freundlichen Güßen

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.