Gast
#74917
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 ...