Forum: Mikrocontroller und Digitale Elektronik MSP430 C-Funktion ins RAM laden (IAR Compiler)


von Jörg S. (joerg-s)


Lesenswert?

Für das beschleunigte schreiben ins Flash vom MSP430 wollte ich die 
Schreib-Funktion ins RAM laden. Das hat soweit auch geklappt, nur gibt 
mir der Compiler (IAR 3.21) noch eine Warnung aus:
"Warning[w29]: Parts of segment MYDATA are initialized (as in module 
infomem), even though it is of type DATA (and thus not promable) "

C-Code:
1
void flash_mem_write_RAM(unsigned int add, unsigned int cnt, unsigned char *data) @ "MYDATA"
2
{
3
  unsigned char *pointer;
4
  unsigned int i;
5
6
  pointer = (unsigned char*)add;    // Flash Pointer setzen
7
8
  while (FCTL3 & BUSY);             // Warten bis Busy 0
9
  FCTL3 = FWKEY;                    // Clear Lock
10
  FCTL1 = FWKEY + WRT + BLKWRT;     // Schreibmodus und Blockschreiben an
11
12
  for (i = 0; i < cnt; i++)
13
  {
14
    *pointer++ = data[i];
15
    while (!(FCTL3 & WAIT));        // Warten bis Wait 1
16
  }
17
18
  FCTL1 = FWKEY;                    // Schreibmodus aus
19
  while (FCTL3 & BUSY);             // Warten bis Busy 0
20
  FCTL3 = FWKEY + LOCK;             // Set Lock
21
}

Unter Options -> Linker -> Extra Options hab ich folgendes eingetragen:
-Z(DATA)MYDATA=0200-03FF


Weiss einer was da noch falsch ist?

von Stefan (Gast)


Lesenswert?

>Weiss einer was da noch falsch ist?
Erstmal ist es eine Warnung und kein Fehler!

Mir erschließt sich auch der Sinn Deiner Aktion nicht so ganz.
Wenn Du Deine Funktion schon beim Programmieren ins RAM reinschreibst, 
dann darfst Du danach den µC nie mehr ohne Versorgungsspannung lassen 
und musst ausserdem darauf achten, daß weder der Stack noch irgendeine 
andere Variable Deine RAM-Funktion zerstört!

Wenn Du den Geschwindigkeitsvorteil des Block-Write unbedingt nutzen 
willst und daher die Funktion im RAM ausführen lassen musst, würde ich 
die Funktion zunächst trotzdem ganz normal ins Flash programmieren (an 
eine feste und bekannte Adresse, am besten die Länge kennen oder 
Endkennung anhängen). Dann zur Laufzeit die Funktion aus dem Flash ins 
RAM kopieren und ausführen lassen.
Sie dazu auch die AppNote von TI:
SLAA103 "MSP430 Flash Self-Programming Technique"

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.