Forum: Mikrocontroller und Digitale Elektronik gcc-arm-none-eabi: Wie const char-Array verschieben?


von Lobi (Gast)


Lesenswert?

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?

von noreply@noreply.com (Gast)


Lesenswert?

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.

von Neverever (Gast)


Lesenswert?

noreply@noreply.com schrieb:
> Ich habe zwar keine Ahnung,


Dieter Nuhr: "Wenn man keine Ahnung hat: Einfach mal Fresse halten"

von Neverever (Gast)


Lesenswert?


von 900ss (900ss)


Lesenswert?

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.

von noreply@noreply.com (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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.

von Lobi (Gast)


Lesenswert?

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.

von Ingo L. (corrtexx)


Lesenswert?

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.

von Jürgen S. (starblue) Benutzerseite


Lesenswert?

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
1
$(LD) ... -Map FILE.map ...
oder beim gcc-Aufruf
1
$(GCC) ... -Wl,-Map,FILE.map ...

von Ingo L. (corrtexx)


Lesenswert?

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"

von Guido G. (nugglix)


Lesenswert?

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?

von Ingo L. (corrtexx)


Lesenswert?

Guido G. schrieb:
> Wohin wird das denn geschrieben, wenn nicht ins Flash?
Ins RAM?

von Lobi (Gast)


Lesenswert?

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.

von Johnny B. (johnnyb)


Lesenswert?

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.

: Bearbeitet durch User
von Ingo L. (corrtexx)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.