Variable im Flash ablegen

Gast #4293688
Lesenswert?

Dafür gibt es keine allgemein gültige Methode.
Im C Standard ist das nicht festgelegt und mehr oder Minder jeder 
Compiler hat da seine eigene Art und Weise.
Es hilft also nur ein Blick ins Handbuch des jeweiligen Compilers.
#4293773
Lesenswert?

in C macht man das meistens so
1
// globale varaible im Flash
2
const uint32_t GobaleVariable = 0xffaa5500;
3

4
int main (void) {
5
   // lokale variable
6
   // auch wenn sie hier als const deklariert wird, wird sie auf dem Stack abgelegt
7
   // deshalb muss sie static const sein
8
   static const uint32_t LokaleVariable = 0x55AA00FF;
9
}

was der compiler aber daraus macht, kann man aber nicht allgemein gültig 
sagen. Besser ist es, mit sections zu arbeiten und entsprechend das 
linkerfile anzupassen.
1
__attribute__((section(".VariablesInFlashSection")))
2
uint32_t GlobaleVariable = 0x12345678;

Hier ist es dann egal, ob const, static, oder wie auch immer.

Soll es tatsächlich eine ganz spezielle Adresse sein, so unterstützt GCC 
zum Beispiel folgendes:
1
uint32_t Variable@0x2000 = 0x89ABCDEF;

Ich empfehle dir allerdings nicht, es so zu tun, da es höchst 
compiler-spezifisch ist und das programm nicht protabel ist!
Gast #4293918
Lesenswert?

Hi

Das mit der Section habe ich probiert, das geht leider nicht. Die
Variable landet in der Flash-Section und nicht in der 
VariablesInFlashSection.
Warnungen gibt es keine...

Das mit dem @ geht auch nicht.

Anmerkung: Ich verwende Rowley Crossworks for ARM, leider ist der
Support ausgelaufen.....
Gast #4294020
Lesenswert?

Das habe ich auch angepasst. Das Problem ist Rowley generiert das
mit jedem build aus einer XML-Datei. Da steht die Sektion auch drin.

Der Ausdruck:

__attribute__((section(".VariablesInFlashSection")))
uint32_t GlobaleVariable = 0x12345678;

wird auch übersetzt, keine Warnung. Die Variable landet nicht da
wo sie sein soll.

MFG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren