mikrocontroller.net

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


Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht 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:
void flash_mem_write_RAM(unsigned int add, unsigned int cnt, unsigned char *data) @ "MYDATA"
{
  unsigned char *pointer;
  unsigned int i;

  pointer = (unsigned char*)add;    // Flash Pointer setzen

  while (FCTL3 & BUSY);             // Warten bis Busy 0
  FCTL3 = FWKEY;                    // Clear Lock
  FCTL1 = FWKEY + WRT + BLKWRT;     // Schreibmodus und Blockschreiben an

  for (i = 0; i < cnt; i++)
  {
    *pointer++ = data[i];
    while (!(FCTL3 & WAIT));        // Warten bis Wait 1
  }

  FCTL1 = FWKEY;                    // Schreibmodus aus
  while (FCTL3 & BUSY);             // Warten bis Busy 0
  FCTL3 = FWKEY + LOCK;             // Set Lock
}

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


Weiss einer was da noch falsch ist?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.