Сюдя по всем проблема возникает после прохождения вот этих строчек кода:
Код
//Здесь инициализируется вотчдог таймер и режим энергосбережения
//В процессе отладки пользовался ассемблером, и не стал менять обратно
//То же самое можно написать и с использованием библиотечных функций
sei();
__asm__ __volatile__("in r16, 0x21");
__asm__ __volatile__("ori r16, 0b00011000");
__asm__ __volatile__("out 0x21 ,r16");
__asm__ __volatile__("ldi r16, 0b01000111");
__asm__ __volatile__("out 0x21 ,r16");
__asm__ __volatile__("ldi r16 ,0b00110000");
__asm__ __volatile__("out 0x35 ,r16");
__asm__ __volatile__("sleep");
//сюда мы вернемся уже через 1 секунду, из прерывания
Быть может, кто-то подскажет какие флаги оптимизации должны стоять, чтобы этот код нормально обрабатывался. Сейчас что-то вроде этого:
Код
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2