Может не совсем в тему, но...
Пишу на с, asm не знаю совершенно, не могу понять почему ATMega32, во время выполнения программы, как будто виснет. Если во время "зависания" была включена отладка и нажать останов, то останавливается вот тут:
Код: Выделить всё
--- No source file -------------------------------------------------------------
0000037E LSL R30 Logical Shift Left
0000037F ROL R31 Rotate Left Through Carry
00000380 LPM R0,Z+ Load program memory and postincrement
00000381 LPM R31,Z Load program memory
00000382 MOV R30,R0 Copy register
00000383 IJMP Indirect jump to (Z)
00000384 CLI Global Interrupt Disable
00000385 RJMP PC-0x0000 Relative jump // вот тут получается останов
00000386 NOP Undefined
00000387 NOP Undefined
00000388 NOP Undefined
00000389 NOP Undefined
0000038A NOP Undefined
0000038B NOP Undefined
0000038C NOP Undefined
0000038D NOP Undefined
0000038E NOP Undefined
0000038F NOP Undefined
00000390 NOP Undefined
00000391 NOP Undefined
00000392 NOP Undefined
Правильно ли я понимаю, что "RJMP PC-0x0000" это, что то вроде перехода по адресу относительно команды, а т.к. параметр нулевой, получается переход на саму себя, т.е. вечный while(1)?
Т.к. перед этим стоит CLI - глобальный запрет прерываний, вся эта петрушка вероятно из-за какого то аппаратного сбоя в МК или программе, это своеобразный стоп работы(максимизация ошибки). В самой программе ничего такого нет, т.е. это компиллятор по умолчанию добавляет(Atmel Studio 7.0)?
Если отбросить железные проблемы, то почему такое может происходить?