Hallo Forum
In einem Projekt (RealView Compiler, LM3S1968) wird ein grosser Struct,
bestehend aus 3008 Float (à 4-Bytes) benützt, macht also 12038 Bytes.
Diese Struktur enthält vordefinierte Kurvendaten, die konstant sind und
bleiben.
Gegenwärtig wird der Struct wie folgt deklariert:
1 | TData Data = {
|
2 | {0.004133f, 0.000003f, 0.000000f},
|
3 | {0.004546f, 0.000023f, 0.005283f},
|
4 | ...}
|
So wie ich das verstehe, liegt der Struct im RAM. Ferner wird irgend wo
Initialisierungscode liegen, welcher nach einem Reset die Werte ins RAM
schreibt.
Nun dachte ich, es wäre effizienter, wenn ich den Struct als const
deklariere:
1 | const TData Data = {
|
2 | {0.004133f, 0.000003f, 0.000000f},
|
3 | {0.004546f, 0.000023f, 0.005283f},
|
4 | ...}
|
Dann wäre 1. sichergestellt, dass niemand mehr darauf schreiben kann, 2.
müsste der Initialisierungscode entfallen und folglich weniger Flash
belegt werden.
Meine Erwartung (2.) wird aber nicht erfüllt, und ich verstehe nicht
warum:
variabel const
Code 146904 146880
ROdata 41800 53832
RWdata 13944 1912
ZIdata 35984 35984
Code used 200724 201100
Der Unterschied bei ROdata beträgt 12038, ebenso bei RWdata, wie
erwartet, da der Struct vom einen in den anderen Bereich wandert. Der
Code bleibt aber praktisch gleich gross. Insgesamt belegt die "const"
Variante mehr Platz im Flash!