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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.