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

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

Engenharia de Sistemas Embarcados 2006.2 Aula 5: Técnicas Especiais de Software.

Apresentações semelhantes


Apresentação em tema: "Engenharia de Sistemas Embarcados 2006.2 Aula 5: Técnicas Especiais de Software."— Transcrição da apresentação:

1 Engenharia de Sistemas Embarcados 2006.2 Aula 5: Técnicas Especiais de Software

2 2006.2Engenharia de Sistemas Embarcados2 Agenda Como manipular o hardware usando C Alguns algoritmos para sistemas embarcados UML para sistemas embarcados

3 2006.2Engenharia de Sistemas Embarcados3 Manipulando o Hardware Software de sistema embarcado  manipulação de dispositivo periférico Dependência da arquitetura –Dispositivo mapeado em porta –Dispositivo mapeado em memória Dispositivo mapeado em porta –Alternativa  escrever código em assembly para manipulação das portas –Compilador C não possui noção intrínseca de portas Dispositivo mapeado em memória –Pode ser manipulado por código C

4 2006.2Engenharia de Sistemas Embarcados4 In-line Assembly Escreve código assembly em funções C Operação simples Fortemente dependente do compilador Pouco portável Deve-se verificar a documentação do compilador Boa prática –Agrupar funções com código in-line assembly em arquivos separados para não contaminar o resto do código int read_reg() { asm(“in acc, 0x42”); } void write_reg(int newval) { asm (“ mov acc, newval out 0x42 “); }

5 2006.2Engenharia de Sistemas Embarcados5 In-line Assembly Leitura e escrita de um registrador de dispositivo localizado no endereço 0x42 Função read_reg assume que valor de retorno está no acumulador –Varia de compilador para compilador Função write_reg assume que compilador traduzirá referência para newval em uma referência para a pilha int read_reg() { asm(“in acc, 0x42”); } void write_reg(int newval) { asm (“ mov acc, newval out 0x42 “); }

6 2006.2Engenharia de Sistemas Embarcados6 In-line Assembly Alguns compiladores não dão suporte a in-line assembly Código assembly deve ser escrito separadamente Código assembly deve linkado ao resto do programa Programação mais complexa pois o programador deve saber as convenções utilizadas pelo compilador para frames da pilha Sugestão  criar template a partir de uma função falsa (fake) int read_reg_fake() { return 0x7531; }

7 2006.2Engenharia de Sistemas Embarcados7 Acesso Mapeado em Memória Modos para manipulação de memória –Baseado no linker –Baseado em ponteiro Manipulação de memória baseado no linker –Utiliza qualificador extern para informar ao compilador que o programa utilizará um recurso definido fora do programa C Source file extern volatile int device_register; LINKER FILE PUBLIC _device_register = $40000000

8 2006.2Engenharia de Sistemas Embarcados8 Manipulação de Memória Baseada em Ponteiro Utilização de ponteiros em C Utilizar casting para forçar um ponteiro para apontar para um endereço específico de memória Exemplo de ASIC mapeado para o endereço 0x40000000 C Source file unsigner short x;//Variável local volatile unsigner short *io_regs;//Ponteiro para ASIC io_regs = (unsigner short* ) 0x40000000;//Aponta para o ASIC x = io_regs[10];//Lê registrador 10

9 2006.2Engenharia de Sistemas Embarcados9 Operações com Bits Programas embarcados normalmente realizam operações de manipulação de bits em registradores de dispositivos Maneira tradicional –Leitura do registrador –Manipular bits correspondentes –Escrever valor atualizado no registrador const char status_mask = 0x04; extern volatile char device_register; device_register = device_register | status_mask; //força o 3o. bit da direita para 1 device_register = device_register & (~status_mask); //força o 3o. bit da direita para 0 device_register = device_register ^ status_mask; //inverte o estado do 3o. bit da direita

10 2006.2Engenharia de Sistemas Embarcados10 Operações com Bits const char status_mask = 0x04; extern volatile char device_register; device_register = device_register | status_mask; //força o 3o. bit da direita para 1 device_register = device_register & (~status_mask); //força o 3o. bit da direita para 0 device_register = device_register ^ status_mask; //inverte o estado do 3o. bit da direita device_register |= status_mask; device_register &= (~status_mask); device_register ^= status_mask; Versão simplificada

11 2006.2Engenharia de Sistemas Embarcados11 Operações com Bits Ler/modificar/escrever funciona na maioria dos casos Leitura de registrador pode ocasionar efeitos indesejáveis –Ex: limpar flag de uma interrupção pendente Utilização de um shadow register (registrador sombra) –Variável utilizada para manter-se a par do conteúdo do registrador Passos para mudança de bit utilizando-se shadow register –Ler o registrador sombra –Modificar o registrador sombra –Salvar o registrador sombra –Escrever o novo valor para o dispositivo

12 2006.2Engenharia de Sistemas Embarcados12 Operações com Bits Utilização de registrado sombra #define STATUS_MASK 0x04 int shadow; device_register = (shadow |= STATUS_MASK);

13 2006.2Engenharia de Sistemas Embarcados13 Modificador de Classe de Armazenamento Volatile Código fonte compilador Código otimizado a = 0 a == 1... S N Compilador otimiza o código

14 2006.2Engenharia de Sistemas Embarcados14 Modificador de Classe de Armazenamento Volatile

15 2006.2Engenharia de Sistemas Embarcados15 Velocidade e Densidade de Código

16 2006.2Engenharia de Sistemas Embarcados16 Interrupções e Rotinas de Serviço de Interrupção (ISRs) Objetivo: maior eficiência no uso do processador –Evitar que a CPU gaste ciclos para verificação da ocorrência de eventos assíncronos ISR (Interrupt Service Routine) –Pedaço simples de código –Dispositivo externo ao núcleo da CPU sinaliza uma interrução

17 2006.2Engenharia de Sistemas Embarcados17 Interrupções e Rotinas de Serviço de Interrupção (ISRs) Ciclo de resposta de uma ISR –Coloca endereço da próxima instrução no topo da pilha –Pega o endereço do vetor da ISR na memória para executar a próxima instrução –Decide quando desabilitar e reabilitar outras interrupções –Salvar o estado de qualquer recursos internos (registradores) utilizados na ISR –Determinar que dispositivo está causando a interrupção (especialmente com interrupções compartilhadas) –Executar o código da ISR –Resetar dispositivos geradores de interrupções externos, se necessário –Restaurar o estado do sistema –Habilitar interrupções –Retornar da interrupção

18 2006.2Engenharia de Sistemas Embarcados18 Do Uso de Laços de Polling para Baseado em Interrupção inicializar Sensor ativado S Verifica sensor 1 Sensor ativado Verifica sensor 1 alarme S Polling ou Interrupção?

19 2006.2Engenharia de Sistemas Embarcados19 Interrupções Aninhadas e Reentrância Interrupções com prioridades diferentes –Interrupção de mais alta prioridade pode preemptar interrupção de mais baixa prioridade –Sistemas simples desabilitam todas as interrupções assim que o programa responde a uma interrupção –Ao final rotina de interrupção reabilita as interrupções Sistemas complexos –Permite aninhamento de interrupções –Função chamadas durante o tempo em que a interrupção está sendo executada são chamadas de funções reentrantes Função reentrante –Função que pode ser chamada assincronamente a partir de múltiplos threads sem se preocupar com sincronização ou acesso mútuo

20 2006.2Engenharia de Sistemas Embarcados20 Regras para determinação de função reentrante 1.Uma função reentrante não pode utilizar variáveis de modo não atômico a menos que sejam armazenadas na pilha da tarefa que chamou a função ou são variáveis privadas da tarefa Código atômico é aquele que não pode ser interrompido 2.Uma função reentrante não pode chamar outras funções que não sejam reentrantes 3.Uma função reentrante não pode utilizar o hardware de modo não atômico

21 2006.2Engenharia de Sistemas Embarcados21 Uso de ISR com Funções não Reentrantes Interrupção modifica dados que estão sendo utilizados por outra tarefa de maneira assíncrona Aparecimento de bugs de sincronização Aparecimento de bugs de acesso mútuo Exemplo –Relógio de tempo real altera a estrutura de dados de relógio do sistema a cada segundo –Rotina lê metade dos dados do relógio do sistema e é interrompida pelo relógio de tempo real –Resultado  rotina lê metade dos dados antigos e metade dos dados atualizados

22 2006.2Engenharia de Sistemas Embarcados22 Medindo o Tempo de Execução Sistemas embarcados de tempo real –Desempenho é tão crítico quanto funcionalidade Utilização de ferramentas para medição precisa de tempo de execução de rotinas do programa –Também aplicável a rotinas de interrupção

23 2006.2Engenharia de Sistemas Embarcados23 Watchdog Timers Responsável por levar o sistema a um estado de execução normal quando este se perde Watchdog é normalmente ligado ao RESET ou a uma interrupção não mascarável Boas práticas de utilização de watchdog –Realizar verificação de sanidade do sistema –Profundidade da pilha –Número de buffers alocados –Estado de componentes mecânicos do sistema –Utilização de flags de verificação em vários pontos do código

24 2006.2Engenharia de Sistemas Embarcados24 Watchdog Timer: Debugando o Sistema Alvo Watchdog timer executa independente do sistema –O que acontece se o usuário para a execução do programa? –Isto acontece durante o debug do programa? –Qual a conseqüência? Utilizar mecanismo para desabilitar o watchdog timer para debug –Exemplo: utilização de compilação condicional (#if DEBUG) –Isolar trechos de código que contém as rotinas de temporização

25 2006.2Engenharia de Sistemas Embarcados25 Memória Flash Facilita upgrade de software Ajuste de código e parâmetros enquanto o sistema está ativo Código deve ser auto-modificável Deve ser capaz de uma falha de maneira que não se torne inoperável Estratégias para viabilizar uso inteligente de memória flash –Programador embarcado e microprogramador

26 2006.2Engenharia de Sistemas Embarcados26 Programador Embarcado Código que é parte do firmware que acompanha o produto Vantagens –Implementação direta –Não precisa de programas de suporte sofisticados Desvantagens –Deve estar disponível desde o primeiro release do produto –Utiliza recursos de RAM e ROM –Falta de flexibilidade

27 2006.2Engenharia de Sistemas Embarcados27 Microprogramador Abordagem é ter apenas o código mínimo (boot loader) necessário para o download do algorítmo da memória flash (microprogramador) e a nova imagem do software Vantagens –Flexibilidade –Pouco overhead de ROM devido ao boot loader Desvantagens –Mais difícil de implementar –Utilização de programas de suporte mais inteligentes

28 2006.2Engenharia de Sistemas Embarcados28 Sugestões para o Projeto do Algorítmo da Flash Programa de boot loader que executa durante power up –Inicializa o sistema de forma rudimentar –Disponibiliza RAM e E/S –Sistema pergunta ao usuário se deve baixar o programa normal ou o algoritmo de reprogramação da flash O código real da aplicação que pode ser reprogramado pelo algoritmo de reprogramação da flash Um algoritmo de reprogramação residente em RAM que realiza de fato a reprogramação do dispositivo –Código é movido da flash para a RAM quando a opção de reprogramação é escolhida


Carregar ppt "Engenharia de Sistemas Embarcados 2006.2 Aula 5: Técnicas Especiais de Software."

Apresentações semelhantes


Anúncios Google