8bit Speicheralignment im 32bit kontroller

Gast #2581638
Lesenswert?

Hallo,

Ich habe einen 32bit Kontroller Arm Cortex M3 und stehe gerade vor dem 
Problem, dass ich 8bit Messwerte habe. Nun ist es so, dass der SPeiche 
rim Controller mit 64kB begrenzt ist. Das würde bedeuten, dass ich im 
controller maximal 16384 Messwerte Speichern kann? siehe dazu: n = 64kB 
* 1024 / 4 = 16384

Ist es möglich, dass ich dem C compiler durch verwendung von pragma pack 
/ pop das Speicheralignment auf 8bit reduzieren könnte um 4 mal mehr 
elemente zu speichern?

mfg
Gast #2581664
Lesenswert?

>uint8_t array[4096] braucht 4KB RAM, egal ob auf einem 8, 16, 32, oder
>64-Bit Prozessor.
Ok, das funktioniert auch ohne das pragma pack/pop?

aber ich verstehe jetzt nicht soganz wie die alu´s damit umgehen, 
schlißlich hat der m3 einen 16 und 32bit alu zu berechnung. der compiler 
kümmert sich um die aufteilung in 8bit werte und berechnet diese 
anschließend?

mfg
#2581679
Lesenswert?

Ja, da kümmert sich der Compiler beim laden der register drum... 
Andersrum wirds komplizierter, also wenn Du mißalligned DWORDS oder so 
rumliegen hast... Auf die funktioniert dann nur einzel-byte-weißer 
zugriff (ist allerdings dann recht Prozessorabhängig, manche könnens 
auch mißalligned)
Gast #2581690
Lesenswert?

fetzt vielen dank :)

eine frage nur noch; der speicher scheint adressmäßig zusammenzuhängen. 
hierbei besitzt mein controller 2 blöcke mit jeweils 32kB. ich brauch 
also nur ein zeiger vom typ uint8_t anzulegen und auf die anfangsadresse 
zu zeigen? durch zeigerarithmetik wie *mem = wert8bit;  mem++  (mem ist 
vom typ *uint8_t) fortlaufen auf den speicher schreiben?
Gast #2581713
Lesenswert?

Ein Problem ergibt sich noch. ich benötige für meine berechnungen den 
datentyp float.


berechnung(float_t*mem) {
.. mach irgendwas ..
}


kann ich einfach mein uint8_t zeiger auf den float zeiger casten?
in der main:
..

uint8_t*mem = ADRESSE;

berechnung((float_t*)mem);
..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren