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 ессно кто неправ?