Hallo, ich bin mir nicht sicher, ob folgendes Problem bei mir liegt oder am Compiler. Bei "normaler" Einstellung funktioniert alles wunderbar, bei Compilieren mit -mint8 kommt aber das falsche Ergebnis raus: prog_char mybits[256] = {1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, .... }; unsigned char bitanz(unsigned char c){ return(PRG_RDB(&mybits[c])); } int main(void){ char i,b; for(;;){ i = 255; b = bitanz(i); } return(b); } Beim normalen Compilieren kommt für Funktion bitanz folgender ASM-Code, der auch wunderbar funktioniert: 25c: 99 27 eor r25, r25 25e: 8a 5d subi r24, 0xDA ; 218 260: 9e 4f sbci r25, 0xFE ; 254 262: e8 2f mov r30, r24 264: ff 27 eor r31, r31 266: 84 91 lpm r24, Z 268: 08 95 ret Bei Compilieren mit -mint8 kommt folgendes: 25c: 99 27 eor r25, r25 25e: 8a 5d subi r24, 0xDA ; 218 260: 9e 4f sbci r25, 0xFE ; 254 262: e8 2f mov r30, r24 264: ff 27 eor r31, r31 266: 84 91 lpm r24, Z 268: 08 95 ret In 264 wird R31 NULL gesetzt statt der bereits richtig errechnete Wert aus R25 übernommen! Sieht irgendwie so aus, als ob -mint8 auch Pointer 8-bittig zurechtstutzt ?!? Viele Grüße, Stefan bdw: das Programm macht wirklich keinen Sinn sondern ist nur zum Test gedacht ...
Die avr-libc kommt mit -mint8 nicht klar, deshalb sollte man es nicht verwenden.
Aber die habe ich doch garnicht eingebunden? Naja, nicht so schlimm, der Code sieht mit "normaler" Compilierung sowieso besser aus, ich habe es nur mal ausprobiert, um die Werteübergabe von/zu Funktionen kürzer zu machen. ALlles andere kann man wohl auch gut mit Typzuweisungen in den Griff kriegen. Gruß, Stefan
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.