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

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

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

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

Interrupções

Ivan Saraiva Silva

Sistemas de Tempo Real Embutidos

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

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.

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

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

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

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

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

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

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

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)

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

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

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

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?

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

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

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

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 datemperatura interrompe:• se uma temperatura muda• periodicamente

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

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

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

Uma Solução (?)

void main (void){

whilw (TRUE) {if (iTemperature[0] != iTemperature[1]) !!! ALARME }}

void interrupt vReadTemp (void){ iTemperature[0] = !! Lê temp. iTemperature[0] = !! Lê temp.}

Hardware de leitura datemperatura interrompe:• se uma temperatura muda• periodicamente

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

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

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

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

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

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. iTemperature[0] = !! Lê temp.}

Hardware de leitura datemperatura interrompe:• se uma temperatura muda• periodicamente

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

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... ...

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

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 ocorrerproblemas se houver interrupçãono calculo dos segundos desdemeia noite

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

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ÇÃOCRÍTICA?

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

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

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

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

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

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 estarcertas