gcc-arm-none-eabi: Wie const char-Array verschieben?

Gast #5591889
Mein Code für einen Cortex M3 enthält die folgende Definition:
1
const char[] = {42, 55, 241, 81, ...};  // mehrere KB

Ich nehme an, gcc-arm legt das Array ins Flash.

Wie kann ich das Array ins SRAM legen? Genügt es, das const zu 
entfernen, oder muß ich das Linker-Skript bemühen?
Gast #5591898
Ich habe zwar keine Ahnung, aber ich würde im Programm das const char [] 
in ein zusätzliches char [] umkopieren, wenn ich die Geschwindigkeit vom 
RAM brauche.
#5591931
Lobi schrieb:
> Genügt es, das const zu entfernen

Der Aufwand, das auszuprobieren wäre weniger Tiparbeit als hier zu 
fragen.
Ich würde sagen, const weg reicht. Wo soll er das dann sonst hinlegen 
wenn es nicht const ist?
Aber es wird trotzdem als Kopie im Flash liegen. Der Startup-Code 
kopiert es dann ins RAM.
Gast #5591958
Neverever schrieb:
>> Ich habe zwar keine Ahnung,
>
> Dieter Nuhr: "Wenn man keine Ahnung hat: Einfach mal Fresse halten"

Ok, großer Krieger. Jetzt mal Butter bei die Fische.

Aus dem Link zum Artikel bin ich leider nicht schlau geworden.

Bekomme ich jetzt bei

char []
1) eine Kopie des Arrays im Flash, das der Compiler im Start-Up-Code 
selbständig ins RAM kopiert.
oder
2) ein Sequenz mit Store-Kommandos, die das char-Array in das RAM 
kopiert.

Ich bin Sparheimer und zu faul der Dekompiler zu benutzen.
Gast #5592152
900ss D. schrieb:
> Der Aufwand, das auszuprobieren wäre weniger Tiparbeit als hier zu
> fragen.

Im Prinzip schon, aber ich weiß leider nicht, wie ich die Position einer 
bestimmten Variable überprüfen kann. Mir geht es ja auch um das const 
char[] Array.
Gast #5592307
Jürgen S. schrieb:
> Dein freundlicher Linker erzeugt auf Anfrage eine Map-Datei, da stehen
> solche Informationen drin.
>
> Entweder
>
1
> $(LD) ... -Map FILE.map ...
2
>
> oder beim gcc-Aufruf
>
1
> $(GCC) ... -Wl,-Map,FILE.map ...
2
>

Danke, das habe ich gesucht.
#5592333
Ingo L. schrieb:
> Ingo L. schrieb:
>> Du siehst doch, dass dein RAM-Verbrauch deutlich ansteigt und
>> gleichzeitig dein Flash-Verbrauch sinkt.
> War wohl zu einfach, daher bestimmt auch die "negative Bewertung"

Ne, die negative Bewertung kommt daher, weil nur eine Deiner zwei 
Aussagen richtig ist.
Der Flashverbrauch ist derselbe, weil die Initialwerte des Arrays ja 
nirgendwo anders als im Flash gespeichert werden können.
Lässt man "const" weg, dann wird zusätzlich noch RAM verbraucht, da 
automatisch code erzeugt wird (bzw. durch startup code), welcher das 
Array, welches im RAM liegt mit den Werten aus dem Flash initialisiert.
#5592339
Johnny B. schrieb:
> Der Flashverbrauch ist derselbe, weil die Initialwerte des Arrays ja
> nirgendwo anders als im Flash gespeichert werden können.
> Lässt man "const" weg, dann wird zusätzlich noch RAM verbraucht, da
> automatisch code erzeugt wird, welcher das Array, welches im RAM liegt
> mit den Werten aus dem Flash initialisiert.
Uups, ich habe übersehen das das Array nicht auf 0 bzw. "alle gleich" 
initialisiert werden...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 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.