Por que um fim-de-interrupção para o mestre PIC causa uma falha tripla (reboot)?
Pergunta
Ok, na escola, estamos desenvolvendo um sistema operacional. Meu projeto foi desenvolver um driver de disco rígido ATA. Eu pensei que eu tinha a minha rotina de serviço de interrupção funcionando muito bem quando meu professor apontou que eu só estava enviando comandos de fim de interrupção para o escravo PIC, e não o mestre também.
Meu problema é que sempre que eu enviar o fim-de-interrupção para o mestre PIC, que provoca uma falha tripla que faz com que meu sistema para reiniciar. Agora eu tenho un / comentou um monte de linhas e parece que sempre que a função para enviar o fim-de-interrupção para o mestre PIC é deixado no código eu recebo a falha tripla.
Agora estou completamente certo do seguinte:
- interrupções são desactivadas ao entrar no meu ISR
- Estou enviando corretamente o byte fim-de-interrupção (classe testado)
- Não sou re-reconhecendo a mesma interrupção
Este tem sido causando frustração enorme, por isso estou esperando que alguém pode me dar alguma orientação, sem precisava ver o nosso código.
Obrigado!
Solução
Eu só posso imaginar isso. Aqui estão algumas coisas para verificar.
- É o exterior EOI do seu limite de segmento?
- É a EOI em uma página somente leitura?
- é seu manipulador de interrupção no nível de privilégio correta para acessar o EOI?
- Você está usando o registro de segmento correto?
Qualquer desses poderia causar uma falha. Que por sua vez poderia causar uma falha dobro ou o triplo se as tabelas descritor ou são corrompidos ou foram ajustados de forma inadequada, para começar.