ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
54828
Romario (23.03.2006 23:55, просмотров: 357)
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 ессно
кто неправ?