1) Definição dupla de __vector_1 e __vector_7. Presente tanto em handler.cc e em my_handler.cc. Para acabar com o problema, foram transferidas todas as DEFINIÇÕES de __vector_n para my_handler.cc. Para melhorar a consistência, as DECLARAÇÕES correspondentes também foram transferidas para my_handler.h 2) Função __bad_interrupt mal declarada no arquivo vector.h. Para evitar name mangling do C++, deve-se declará-la dentro de um "extern "C"". 3) (Erro primário): no arquivo timer.h, os valores a serem gravados em TCCR0 estão trocados. Dessa forma, a função Timer::start pára o contador de relógio, e a Timer::stop o inicia. 4) No arquivo system.cc, a função init() inicializa incorretamente o valor do registrador GIMSK. O valor que está no arquivo é 0x01, escrevendo um bit sem nenhum significado. Para ativar a interrupção INT0, deveria se ativar o bit 7, portanto o valor de GIMSK deve ser 0x40 5) No arquivo context.h, a função RESTORE_CONTEXT() está "recuperando" os valores da pilha (o contexto) ao contrário. Ao invés de fazer "pop r31; pop r30...", estava fazendo "pop r0; pop r1..." 6) Na declaração dos __vector_n, não havia o atributo NAKED. De tal forma, acontecia um salvamento duplicado e desnecessário de contexto, principalmente no caso de __vector_1 e __vector_7 (INT0 e TIMER0, respectivamente) 7) Na declaração de __bad_interrupt também faltava o atributo NAKED, causando as mesmas consequências. 8) Na função handle_timer0(), em system.cc, falta uma condição envolvendo as 3 últimas linhas. O contador só deve ser parado e os LEDs acesos caso a variavel count tenha alcançado 128. Esse valor é o número de overflows que ocorrem no contador 0 durante 4 segundos, selecionando-se CLK1024. 9) while(1) no main não tem ponto-e-vírgula depois. 10) DDRB está com o endereço errado. Deveria ser 0x17. Pseudo-erros: 1) O comportamento do programa é o de "somar" os tempos em que o botão permaneceu pressionado, até que atinja 4s, e então os LED's se acendem e o tempo reinicia. Porém, caso o comportamento for o de não permitir essa soma, a variavel count deve se tornar membro estático de System (System::count), e ser zerada sempre que ocorre um evento de liberação de um botão. 2) Problema de resolução de tempo: Atualmente, sempre que ocorre um evento de liberação de botão, OU então quando a variável count atinje o valor contabilizando 4s, o timer é parado, porém seu valor não é zerado. Dessa forma, pode ser adicionado um tempo de no máximo (1/32)s à próxima "iteração". Isso pois o período de overflow do timer0 é de 32Hz