Variable im Flash ablegen

Gast
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.
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.