ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
425455
Юрий_СВ (18.07.2013 17:10, просмотров: 9004)
Почему-то строка "rpm=1000000/rpm;" "помогает" выйти из цикла do/while. (WinAVR 2010 под AVR Studio). Никто не подскажет почему ? Если указанную строчку исключить - последний оператор (вывод на экран) работает, иначе - нет. Текст после цикла выполняется нормально в любом случае. Сам цикл : do { u32_t tacho_period; u16_t rpm; u8_t tacho_pure_val; asm volatile("cli\n\t"::); // tacho_period=tacho.period; tacho_pure_val=tacho.pure_val; asm volatile("sei\n\t"::); // tacho_period>>=2; // rpm=tacho_period; rpm=1000000/rpm; rpm*=60; // printExtNum(rpm, 4); } while(0); Ассемблер: 183: rpm=1000000/rpm; +00000327: E072 LDI R23,0x02 Load immediate +00000328: 9556 LSR R21 Logical shift right +00000329: 9547 ROR R20 Rotate right through carry +0000032A: 9537 ROR R19 Rotate right through carry +0000032B: 9527 ROR R18 Rotate right through carry +0000032C: 957A DEC R23 Decrement +0000032D: F7D1 BRNE PC-0x05 Branch if not equal +0000032E: E040 LDI R20,0x00 Load immediate +0000032F: E050 LDI R21,0x00 Load immediate +00000330: E460 LDI R22,0x40 Load immediate +00000331: E472 LDI R23,0x42 Load immediate +00000332: E08F LDI R24,0x0F Load immediate +00000333: E090 LDI R25,0x00 Load immediate +00000334: D50C RCALL PC+0x050D Relative call subroutine +00000335: 01C9 MOVW R24,R18 Copy register pair