A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Interrupções Ivan Saraiva Silva Sistemas de Tempo Real Embutidos.

Apresentações semelhantes


Apresentação em tema: "Interrupções Ivan Saraiva Silva Sistemas de Tempo Real Embutidos."— Transcrição da apresentação:

1 Interrupções Ivan Saraiva Silva Sistemas de Tempo Real Embutidos

2 O Problema Nem sempre é possível garantir que o sistema (embutido) vai reagir rapidamente a eventos externos. Exemplo –Em um sistems automatizados de controle de trem elétrico –O trem está desenvolvendo sua velocidade máxima quando um sensor avisa da presença de um obstáculo na linha.

3 Uma solução Interrupção Uma interrupção deve causar a suspensão da atividade em execução para que a interrupção seja tratada Interrupção pode introduzir novos problemas –Programabilidade –Imprevisibilidade

4 Conceitos básicos Em sistemas embutidos baseados em micro- controladores –Aplicações desenvolvidas em linguagens de alto nível são traduzidas para código assembly –A maioria dos comandos da linguagem C, por exemplo, são traduzidos em uma série de instruções assembly

5 Conceitos básicos A maioria dos micro-controlador possuem pinos de interrupção (IRQ – Interrupt Request) Quando um destes pinos é ativado o micro- controlador para a seqüência de execução apontada pelo PC e salta para uma rotina de tratamento da interrupção

6 Conceitos básicos Tarefas da rotina de tratamento –Salvar contexto –Tratar a interrupção –Restaurar contexto Para a maioria dos microcontroladores é possível desabilitar interrupções A maioria dos microcontroladores dispões de interrupções não macaráveis (não podem ser desabilitadas)

7 Conceitos básicos Sobre interrupções e microntroladores é necessário conhecer –Onde encontrar a rotina de tratamento da interrupção –Se duas interrupções ocorrem ao mesmo tempo qual é trataDa primeiro –O que acontece se uma interrupção ocorre quando interrupções estão desabilitadas

8 Conceitos básicos –O que acontece se o programador esquece de reabilitar as interrupções depois elas foram desabilitadas? –O que acontece se o programador desabilita as interrupções quando elas já estão desabilitadas? –O que acontece se o programador habilita as interrupções quando elas já estão habilitadas? –As interrupções estão habilitadas ou desabilitadas quando o microcontrolador é inicializado? –Rotinas de interrupçào podem ser escritas em C?

9 Variáveis Compartilhadas Um problema comum ocorre devido a necessidade de comunicação entre as tarefas do sistema e as rotinas de interrupção Normalmente esta comunicação é feita por intermédio do compartilhamento de variávies. EXEMPLO

10 Exemplo void main (void) { int iTemp0, iTemp1; whilw (TRUE) { iTemp[0] = iTemperature[0]; iTemp[1] = iTemperature[1]; if (iTemp0 != iTemp1) !!! ALARME; } void interrupt vReadTemp (void) { iTemperature[0] = !! Lê temp; iTemperature[1] = !! Lê temp; } Hardware de leitura da temperatura interrompe: se uma temperatura muda periodicamente

11 Alarme Falso void main (void) { int iTemp0, iTemp1; whilw (TRUE) { iTemp[0] = iTemperature[0]; iTemp[1] = iTemperature[1]; if (iTemp0 != iTemp1) !!! ALARME } E se uma interrupção acontecer aqui? Alarme falso

12 Uma Solução (?) void main (void) { whilw (TRUE) { if (iTemperature[0] != iTemperature[1]) !!! ALARME } void interrupt vReadTemp (void) { iTemperature[0] = !! Lê temp. } Hardware de leitura da temperatura interrompe: se uma temperatura muda periodicamente

13 Alarme Falso... Begin: MOVE R1, (iTemperature[0] MOVE R2, (iTemperature[1] SUB R1,R2 JCOND ZERO, Begin Código Alarme... E se uma interrupção acontecer aqui? Alarme falso

14 Quando este problema é percebido As 5 da noite na sexta-feira Quando você não estiver prestando atenção Quando não se dispões de recursos para depuração Quando seu sistema foi acionado em Marte Durante a demonstração para o Cliente FALHA QUANDO NÃO DEVERIA

15 A SOLUÇÃO void main (void) { int iTemp0, iTemp1; whilw (TRUE) { disable ( ); iTemp[0] = iTemperature[0]; iTemp[1] = iTemperature[1]; enable ( ); if (iTemp0 != iTemp1) !!! ALARME; } void interrupt vReadTemp (void) { iTemperature[0] = !! Lê temp. } Hardware de leitura da temperatura interrompe: se uma temperatura muda periodicamente

16 A Solução... Begin: DI (Instrução Disable Interruption) MOVE R1, (iTemperature[0]) MOVE R1, (iTemperature[1]) EI (Instrução Enable Interruption) SUB R1,R2 JCOND ZERO, Begin Código Alarme...

17 Mais Exemplo void interrupt vUpdateTime (void) {++iSeconds; if (iSeconds >=60) {iSeconds = 0; ++iMinutes; if (iMinutes >=60) {iMinutes = 0; ++ iHours; if (iHours >=24) iHours = 0; } long lSencoSinceMidnight (void) { return ((((iHours*60)+iMinuts)* 60)+iSeconds); } Obviamente podem ocorrer problemas se houver interrupção no calculo dos segundos desde meia noite

18 Soluções long lSencoSinceMidnight (void) { disable ( ); return ((((iHours*60)+iMinuts* 60)+iSeconds); enable ( ); } ERRADO long lSencoSinceMidnight (void) { long lReturnVal disable ( ); lReturnVal = (((iHours*60)+iMinuts)*60) +iSeconds; enable ( ); return (lReturnVal); } SE CHAMADO EM SEÇÃO CRÍTICA?

19 Soluções long lSencoSinceMidnight (void) { long lReturnVal Bool fInterruptStateOld; fInterruptStateOld =disable ( ); lReturnVal = (((iHours*60)+iMinuts)*60) +iSeconds; if(fInterruptStateOld) enable ( ); return (lReturnVal); } Desable retorna TRUE se não desabilitado antes

20 Soluções void interrupt vUpdateTime (void) { ++lSecondsToday; if (lSecondsToday == 60*60*24) lSecondsToday = 0L; } long lSencoSinceMidnight (void) { return (lSecondsToday); } Solução se registradores do micro-controlador longos MOVE R1, (lSecondsToday) RETURN

21 Soluções void interrupt vUpdateTime (void) { ++lSecondsToday; if (lSecondsToday == 60*60*24) lSecondsToday = 0L; } long lSencoSinceMidnight (void) { long lReturn; lReturn = lSecondsToday; while (lReturn != lSecondsToday) lReturn = lSecondsToday; return (Return); Se duas leituras são idênticas devem estar certas


Carregar ppt "Interrupções Ivan Saraiva Silva Sistemas de Tempo Real Embutidos."

Apresentações semelhantes


Anúncios Google