ADS1.2 макс оптимизация. глюк или фича?
void putch(u8_t byte) {
u8_t b = (byte >> 4) & 15;
// дизасм входа...
0x00000114: e1a03000 .0.. MOV r3,r0
0x00000118: e1a00220 ... MOV r0,r0,LSR #4
// сдвиг был, &15 игнорированно т.к byte = байт и
// должен быть обнулен (биты 8...31) до вызова.
// тут считывается значение хрен знает откуда
// т.к. r0 содержит мусор в старшей части и проц зависает.
putch0(b["0123456789ABCDEF"]);
b = byte & 15;
putch0(b["0123456789ABCDEF"]);
}
static u8_t funct (void) {
.............
volatile u8_t call_st;
.................
.................
.................
***
// тут я забыл инициализировать call_st
putch(call_st);
0x000016b8: e1a00005 .... MOV r0,r5
0x000016bc: ebfffffe .... BL putch
// в функцию грузится r5 который не инициализирован и содержит мусор
}
если вместо *** поставить чтонибудь call_st = 0. все OK ессно
кто неправ?