Mein Code für einen Cortex M3 enthält die folgende Definition:
1
constchar[]={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?
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.
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.
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.
noreply@noreply.com schrieb:> Bekomme ich jetzt bei
Kommt schwerstens darauf an ob Deine Variable global (oder static) oder
eine lokale Variable ist. Letztere muss der Compiler ja jedesmal neu
initialisieren.
Also 1 bei Global und was ähnliches wie 2 bei local.
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.
Lobi schrieb:> 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.
Du siehst doch, dass dein RAM-Verbrauch deutlich ansteigt und
gleichzeitig dein Flash-Verbrauch sinkt.
Lobi schrieb:> ich weiß leider nicht, wie ich die Position einer> bestimmten Variable überprüfen kann. Mir geht es ja auch um das const> char[] Array.
Dein freundlicher Linker erzeugt auf Anfrage eine Map-Datei, da stehen
solche Informationen drin.
Entweder
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"
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"
Warum sollte der Flash-Verbrauch sinken?
Wohin wird das denn geschrieben, wenn nicht ins Flash?
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.
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...