Ivan Saraiva Silva Sistemas de Tempo Real Embutidos

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

Sistemas Operacionais
Sincronização de Processos (1)
Capitulo 6: Entrada e Saída
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Estruturas de Controle
WebDesign Redes de Computadores Aula 07
Sistema Operacional Sincronização e Comunicação entre Processos
Técnicas para operações E/S
Meu primeiro programa em ARDUINO
Chip-Select e Controle de Interrupção
Escalonamento Linux.
Arquitetura de Sistemas Operacionais
Sistemas Operacionais II
Sistemas Operacionais
Problemas com Entrada e Saída
Conhecendo Hardware Parte 1
Ferramentas Programação
Sincronização de Processos (3)
Interrupts and Exceptions Understanding the Linux Kernel
Interrupções do DSP Desvios do programa principal para um endereço definido com o objetivo de atender a um evento; As interrupções podem ser de hardware.
Sincronização e Comunicação entre Processos
Arquitectura de Computadores II
Processadores – Aula 3 Professor: André Luis Meneses Silva
Processadores – Aula 3 Professor: André Luis Meneses Silva
Sistemas Operacionais I
PIC16F877A Linguagem C e Assembly
Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP PIC16F877A - Parte III Jadsonlee da Silva Sá
PROGRAMAÇÃO I UNIDADE 1.
Unidade 3 Controle de Concorrência
OO-SC (Meyer) - Cap 121 OO-SC (MEYER) Quando o contrato é quebrado: tratamento de exceções.
Arquitetura de computadores
Estruturas de Dados Módulo 3 – Controle de Fluxo
Processo Entidade dinâmica e efêmera
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Organização e Arquitetura de Computadores
Conteúdo Processos e threads Partes do processo
Interface entre as linguagens C e Assembly 8085
Suporte de hardware à multiprogramação
Organização e Arquitetura de Computadores
Processos.
SISTEMAS OPERACIONAIS I
Computação L1: Infra-Estrutura Básica
Arquitetura de Sistemas Operacionais
Tratamento de Exceções
Introdução à Linguagem C
PIC Peripheral Interface Controller
Arquitetura de Computadores
Disciplina: Microcontroladores Prof. Remy Eskinazi, MSc UPE - POLI
Programação de PIC em C Exposição das funções básicas para
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
8088 Assembly Software Básico Mitsuo Takaki.
Algoritmos e Programação I
8 - 1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM A pilha e subrotinas.
©André Santos, Concorrência: Sincronização de fina granularidade II André Santos CIn-UFPE.
IHS Aula Prática 4 Interrupções
Lucas Aranha ASSEMBLY Lucas Aranha
Engenharia de Sistemas Embarcados Aula 5: Técnicas Especiais de Software.
Processador MAC-1 Arquitectura.
Linguagens de Programação
Profa. Maria Augusta Constante Puget
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia da Computação – CECOMP Módulo Timers - PIC16F877A Jadsonlee da Silva Sá.
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny.
EA869 Interrupção Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
ProgramaçãoConcorrente Glêdson Elias
Transcrição da apresentação:

Ivan Saraiva Silva Sistemas de Tempo Real Embutidos 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.

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

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

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

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)

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

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?

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

Exemplo Hardware de leitura da void main (void) { temperatura interrompe: se uma temperatura muda periodicamente 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; }

E se uma interrupção acontecer aqui? 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

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

E se uma interrupção acontecer aqui? 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

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

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

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

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

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

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

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

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