Hallo Jens,
ich vermute mal, dass deine Variablen nicht in den FRAM abgelegt werden?
Im normalfall werden alle Variablen in ".data", also SRAM abgelegt.
Hierfür gibt es mehrere Möglichkeiten, mit denne ich zumindestens das
gewünschte Verhalten umsetze:
- Du kannst bei der Deklaration der Variablen deren Speicherort
festlegen (FRAM - Bereich).
bspw:
1 | #pragma LOCATION( x , address );
|
2 | int x;
|
- Du kannst sie gleich als Persistent deklarieren, da diese automatisch
vom Linker in den FRAM gelegt werden. Evtl. nicht optimal für deine
Anwendung, da hier nur einmalig beim Download die Variable initalisiert
wird.
1 | #pragma PERSISTENT (x );
|
2 | int x=10;
|
- Du erstellst im Linker Command File eine eigene Section und weißt
dieser die Variablen zu (Wohl beste Lösung)
1 | #pragma SET_DATA_SECTION(".FelixSection")
|
2 | unsigned int Test;
|
3 | ...
|
4 | #pragma SET_DATA_SECTION()
|
und cmd-File:
1 | GROUP(READ_WRITE_MEMORY): ALIGN(0x0200) RUN_START(fram_rw_start)
|
2 | {
|
3 | .cio : {} /* C I/O BUFFER */
|
4 | .sysmem : {} /* DYNAMIC MEMORY ALLOCATION AREA */
|
5 | .FelixSection: {} /* Test */
|
6 | }
|
PS:
- Die oben genannten Ausschnitte sind nur für Code Composer Studio und
C. Für IAR oder Assembler sieht die Syntax jeweils anders aus.
- Manche MSP430FR haben eine MPU oder ein FRAM Protection-Bit, welche
den Zugriff blockieren ;)
- Die passenden Userguides:
+ MSP430 Optimizing C/C++ Compiler v 4.3
+ MSP430 Assembly Language Tools v 4.3