Aula 4 - Arquitetura de Sistemas Embarcados I

download Aula 4 - Arquitetura de Sistemas Embarcados I

of 49

Transcript of Aula 4 - Arquitetura de Sistemas Embarcados I

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    1/49

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    2/49

    Direcionamento 1 aula Introduo a Sistemas Embarcados

    2 aula Microcontrolador ATMEGA168

    3 aula Projeto de Firmware

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    3/49

    Direcionamento 4 aula Projeto de Firmware

    5 aula Gerenciamento de energia

    6 aula Projeto final

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    4/49

    Objetivos Esclarecer dvidas sobre os exerccios da ltima

    aula

    Conhecer caractersticas e tcnicas importantes doprojeto de sistemas embarcados

    Aprender a utilizao delas, de modo a reduzir o

    tempo gasto com depurao

    Entender como as tcnicas auxiliam na confecode firmwares mais confiveis, robustos e seguros.

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    5/49

    Conceitos vistos na aula passada Fluxo de desenvolvimento

    Hardware e Firmware

    Kit de desenvolvimento

    Estrategias de desenvolvimento de Firmware

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    6/49

    Conceitos vistos na aula passada Estruturas basicas de Firmware

    Keywords importantes Static, const, register, inline, volatile, #define

    safeguard

    Tipos de dados com tamanho fixo

    Exerccios

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    7/49

    Estrutura desta aula Transferncia de cdigo Exerccios sobre perifericos Conceitos importantes de Sistemas embarcados

    Reentrncia Armazenamento em memria de programa

    Condio de corrida Organizao da memria Stack overflow Fragmentao do heap

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    8/49

    Fluxo de desenvolvimentoConcepo do

    produto

    Definio dohardware

    Definio dofirmware

    Download eteste

    Integrao

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    9/49

    Instalao do kit Conexo pela USB

    Instalao do driver do FT232RL (conversorUSB-serial)

    Localizao do arquivo para gravao no kit:arquivo binrio formato Intel Hex (arquivo.hex)

    Ativao do software de transferncia defirmware. (AVRdude ou AVRAdaptor)

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    10/49

    AVRDUDE

    Aplicativo para programao de AVR

    Criado para quaisquer MCU com ISP

    AVRDUDE arduino: Verso especfica para ATMEGA com bootloader arduno.

    Emula o funcionamento do KIT ATMEL STK-500 Preparado para lidar com o chip FTDI-232 Prprio para ser utilizado com a interface nativa arduno Linha de comando Possvel integrao com AVRStudio4

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    11/49

    Procedimento AVRDUDE

    Software AVRDUDE arduno1. Comunicao com o FTDI-232 Reset ATMEGA168

    2. Sinalizao de gravao execuo bootloader

    3. Negociao com o Bootloader para receber um

    arquivo binrio e grav-lo na FLASH

    4. FTDI-232 - Reset do ATMEGA execuo normal

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    12/49

    Procedimento AVRDUDE

    avrdude -v -pm168 -Cavrdude.conf -cstk500v1-Pcom3 -b19200 -Uflash:w:C:\ProjetoTeste.hex:i

    Mostrar oandamento

    Microcontrolador

    Configurao

    Tipo doprogramador

    Configuraesda interface Segmento Operao:

    Write

    Caminho

    Formato:Intel Hex

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    13/49

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    14/49

    Instalao AVRAdaptor Descompactar AVRAdaptor.rar

    Title: AVRAdaptorCommand: java.exeArguments: java -jar Initial Directory: $(ProjectDir)

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    15/49

    Instalao AVRAdaptorExemplo:Neste exemplo os arquivos do AVRAdaptor e do

    avrdude estao em "C:\temp"

    Title: AVRAdaptor

    Command: java.exeArguments: -jar "c:\temp\AVRAdaptor.jar" m168

    com3 19200 $(ProjectDir) "C:\temp"Initial Directory: $(ProjectDir)

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    16/49

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    17/49

    Exerccios da aula passada At o intervalo

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    18/49

    1 Exerccio GPIO e Interrupes Configurao bsica:

    GPIO: PortB: PB4 e PB5: sada PB2 e PB3: entrada

    Interrupes externas Int0: borda de descida Int1: alterao de nvel

    Elaborar uma forma de testar a configurao No kit (prefervel) ou Simulador Proteus

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    19/49

    2 Exerccio EEPROM e Serial

    Utilizao de perifricos e kit dedesenvolvimento

    Elaborar um sistema seja capaz de guardar trsbytes na memria EEPROM. Os trs primeiros bytes enviados pela serial

    devem ser armazenados.

    Ao POR os trs dados devem ser enviados pelaserial. Deve se comunicar com um emulador de terminal

    (usar software Hercules)

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    20/49

    3 Exerccio A/D e Timers

    Utilizao de perifricos e kit dedesenvolvimento na solucao de um problemareal dimmer Dever controlar o brilho de um led O brilho dever obedecer a posio de um

    potencimetro.

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    21/49

    Intervalo

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    22/49

    Reentrncia

    uma funo poder ser chamada por si ou poroutra funo N vezes antes de uma execuoanterior ter sido finalizada, sem alterao do

    resultado de nenhuma delas

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    23/49

    Exemplo de no-reentrnciaint exp = 4; //globaldouble pwd(double x)

    { if (exp

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    24/49

    Exemplo de no-reentrncia-potenciao

    Processo 1power(5,4)5*power(5,3)

    5*power(5,1)5*1

    Processo 2power(2,4)2*power(5,2)

    2*power(5,0)2*1

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    25/49

    Exemplo de reentrnciadouble pwd(double x, int exp)

    { if (exp

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    26/49

    Exemplo de reentrncia -potenciao

    Processo 1power(5,4)5*power(5,3)

    5*power(5,2)5*power(5,1)5*1

    Processo 2power(2,4)2*power(5,3)

    2*power(5,2)2*power(5,1)2*1

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    27/49

    Reentrncia Importncia

    Confiabilidade em Multi-Threading Uma main e diversas interrupes Diversos processos em um RTOS

    Gerenciamento de memria Chamadas subseqentes no ocupam mais

    memria. Apenas a pilha de funes alterada possvel ter N chamadas a mesma funo, sem

    esgotar a memria

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    28/49

    Condies para reentrncia No modificar a si prprio:

    A instrues devem ser as mesmas

    Boa parte dos embarcados executam da flash

    Algumas linguagens permitem essa modificao,

    como Cobol, Perl, Python, Lisp

    No chamar funes no reentrantes A contaminao com cdigo no reentrante se

    propaga e invalida a rentrncia de outras funes

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    29/49

    Condies para reentrncia

    As variveis modificadas pela funo devempertencer quela instncia da funo: Se a funo for chamada N vezes as variveis

    modificadas devem ocupar N locais diferentes na RAM.

    No manter referncia nem retornar endereos avariveis static ou globais

    No bloquear o acesso a variveis compartilhadas

    Deve modificar apenas os dados fornecidos por quem

    chamou

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    30/49

    Cuidados com a reentrncia ISR so inerentemente no reentrantes:

    Dependem de recursos nicos Bloqueiam o acesso a eles

    Condio bsica para permitir a recursividade

    Apesar de no ser muito comum em sistemasembarcados

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    31/49

    Como fazer funes reentrantes? Modificar os hbitos de programao

    Tanto para embarcados quanto para desktop Escrever funes que modifiquem somente os

    dados que lhe foram passados Cuidado com ponteiros que apontam para a

    memria de programa

    Utilizar bibliotecas reentrantes Utilizar a newlib Ansi C ao invs da Ansi C

    Monitorar o uso de memria Previne outros problemas relativos a memria

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    32/49

    Armazenamento de dados emprograma Em geral existe mais memria de programa do

    que memria RAM 16kByte(programa )x 1kByte(dados) ATMEGA168

    Objetivo

    Remanejar o armazenamento de acordo com anecessidade. Em alguns casos, possibilitar a construo do

    sistema.

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    33/49

    Arquitetura Harvard modificada

    CPU

    Instrues + constantes Dados

    En

    dereo

    B

    En

    dereo

    A

    Dados

    A

    Dados

    B

    Memria Flash Memria RAM

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    34/49

    Armazenamento de dados emprograma Exemplo no AVRStudio

    ProjetoExemploDadosNoProg

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    35/49

    Condio de corrida

    o evento no qual dois ou mais processosconcorrerem ao mesmo recurso, modificando o

    resultado de um ou mais processos.

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    36/49

    Condio de corridamain() ISR()

    Dado disponvel

    Processamento

    Processamento

    Dado disponvel

    Dado disponvel

    Dado disponvel

    Possvelcorrompimento

    CPU ocupada

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    37/49

    Causas da condio de corrida

    Variveis compartilhadas

    Preempo aleatria

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    38/49

    Como evitar a condio de corrida Cuidar de eventos que devem ser executados

    atomicamente Verificao de flags, operaes aritmticas

    Garantir pares de aes

    Recepo -> ACK, Dado novo -> Verificao

    Desabilitar interrupoes caso necessrio Risco de ignorar eventos

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    39/49

    Organizao de memria de programa

    .vectorsFunes

    eincludes

    mainEspao

    livreBoot

    loader

    0x0000Fim .vector 0x0033Inicio Appl. 0x0034

    0x1FFFFim Appl. 0x1BFF

    Inicio .bootloader 0x1C00

    Aplicao

    8kWords = 8192 endereos x 16bitsou

    16384 endereos x 8bits (Cuidado!!!)

    7168 x 16bits 1024 x 16bits

    Seo .textSeo.bootloader

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    40/49

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    41/49

    Organizao de memria de dados

    .data .bss heapEspao

    livrestack

    __data_start

    __data_start = __bss_start

    __bss_end = __heap_start

    __heap_end

    stack pointer

    RAMEND

    Constantes eVariveis static

    Constantes eVariveis staticno inicializadas

    Espao paraalocao dinmica Pilha

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    42/49

    Organizao de memria Exemplo no AVRStudio

    ProjetoExemploMapaMemoria

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    43/49

    Stack Overflow

    o evento de ter-se uma pilha escrevendo emuma regio de memria protegida.

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    44/49

    Organizao de memria de dados

    .data .bss heap stack

    .data .bss heap Espaolivre

    stack

    Pilha linear

    Pilha circular

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    45/49

    Como evitar Stack Overflow Monitoramento do ponteiro da pilha

    Stack pointer

    Executar uma rotina peridica que verifique se oStack pointer no est invadindo o heap

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    46/49

    Fragmentao do Heap

    o evento de se ter uma alocao to irregularno heap que impede alocaes subsequentes

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    47/49

    Espao livre

    Fragmentao no Heap

    X Y A1 B3 Espaolivre

    2bytes 1bytes 3bytes 3bytes 2bytes

    11bytes

    Espaolivre

    Espaolivre

    3bytes B3Impossvel alocar 3bytes

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    48/49

    Como evitar a fragmentao noheap No utilizar alocao dinmica

    Na verdade at pode, mas uma vez somente

    e no inicio do firmware.

    Fazer alocaes de tamanho fixo

  • 7/31/2019 Aula 4 - Arquitetura de Sistemas Embarcados I

    49/49

    Prxima aula

    Gerenciamento de energia