Forum: Compiler & IDEs 32 bit integer für SRAM


von Max (Gast)


Lesenswert?

Hallo!

Ich benutze einen externen SRAM speicher mit 2048kB = 2MB und benötige
dafür 21 adressleitungen, sprich 21 bits. also dachte ich mir, verwende
ich den uint32_t 32-bit integertype aus der <inttypes.h> von WinAVR,
jedoch funktioniert die ganze sache nicht so recht. was könnte die
ursache für dieses problem sein und wie kann ich es lösen? - und kann
ich das unten setehnde beispiel so verwenden?

-------

uint32_t i,end_addr;

end_addr=byte0|(byte1<<8)|(byte2)<<16;      //byte0..2 addressbytes

for(i=0;i<end_addr;i++){
    ....
}

--------

danke und schöne grüße,
Max

von Max (Gast)


Lesenswert?

noch einige zusätzliche informationen:

dass es nicht funktioniert, habe ich daran erkannt, dass die schleife
bei 32767 abgebrochen hat, was den wertebereich eines 16-bit signed
integer entspricht.

ich verwende einen ATmega32 und WinAVR

gruß,
max

von Peter D. (peda)


Lesenswert?

Viele lieben C, weil es sich nicht einmischt.

Z.B. geht es davon aus, daß der Programmierer sich was dabei gedacht
hat, wenn er eine Operation mit Bereichsüberschreitung durchführt.

Und das hier:

(byte2)<<16;

dürfte eine solche sein, sofern byte2 nicht 32bittig ist.
Könnte man z.B. so abändern:

((unsigned long)byte2)<<16;


Peter

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.