Engenharia de Sistemas Embarcados 2006.2 Aula 4: O Ambiente de Desenvolvimento.

Post on 07-Apr-2016

222 views 1 download

Transcript of Engenharia de Sistemas Embarcados 2006.2 Aula 4: O Ambiente de Desenvolvimento.

Engenharia de Sistemas Embarcados 2006.2Aula 4: O Ambiente de Desenvolvimento

2006.2 Engenharia de Sistemas Embarcados 2

O ambiente de Execução

• Como o sistema utiliza a memória– Como o processador gerencia a pilha

• O que acontece na inicialização do sistema• Como interrupções e exceções são tratadas

2006.2 Engenharia de Sistemas Embarcados 3

Organização de Memória

EspaçoSistema

EspaçoCódigo

EspaçoDados(ROM)

EspaçoE/S

EspaçoDados(RAM)

Heap Pilha

Mapa de memória do processador 68k (Motorola)

0x00000000

0x00000400

0xFFFFFFFF

EspaçoSistema

EspaçoCódigo

EspaçoDados(ROM)

Pode ser implementado como ROM

EspaçoDados(RAM)

Heap Pilha

Pode ser implementado com RAM

2006.2 Engenharia de Sistemas Embarcados 4

Organização de Memória

• Espaço de sistema– Tabela de vetores de exceção– Vetores de exceção são endereços “hardwired”– Identificam código a ser executado após ocorrência

de interrupção ou exceção• Espaço de código

– Espaço reservado para as instruções do processador

• Espaço de dados de ROM– Valores constantes– Mensagens de erro– Literais strings

2006.2 Engenharia de Sistemas Embarcados 5

Organização de Memória

• A pilha– Mantém histórico dos contextos de execução atual

e suspensos– Contém variáveis locais e ou variáveis automáticas– Endereços de retorno de todas as funções e

interrupções

Variável automática

Que valor será impresso pelo programa abaixo?

EspaçoDados(RAM)

Heap Pilha

0xFFFFFFFF

2006.2 Engenharia de Sistemas Embarcados 6

Organização de Memória

• Área livre– Variáveis alocadas estaticamente para leitura e

escrita– Variaveis globais– C statics

EspaçoDados(RAM)

Heap Pilha

0xFFFFFFFF

2006.2 Engenharia de Sistemas Embarcados 7

Organização de Memória

• O Heap– Espaço de memória que resta após alocação da

pilha e da área memória livre– Pode ser uma estrutura de dados complexa– Nem todos os sistemas embarcados utilizam o

heap. Por que?– Alocação dinâmica de dados

• new e malloc()

EspaçoDados(RAM)

Heap Pilha

0xFFFFFFFF

2006.2 Engenharia de Sistemas Embarcados 8

Organização de Memória

• O que acontece se a pilha crescer demais?• Sugestão em “The Art of Embedded

Systems”, Jack Ganssle

EspaçoDados(RAM)

Heap Pilha

0xFFFFFFFF

0xff0xff0xff0xff0xff0xff0xff0xff

stackstackstackstack

Espaço alocado para a pilha = 2x espaço utilizado

2006.2 Engenharia de Sistemas Embarcados 9

Inicialização do Sistema

• Fase de hardware– Ativada pelo RESET– Força a CPU a

começar a execução do programa ou algum código que carrega o programa

• Fase de software– Software controla a

CPU– Inicialização de

recursos– Criação do ambiente

de execução da aplicação

Inicializa ponteiro da pilha

Limpa a memória

Inicializa E/S

Chama main()

Seqüência de inicialização do 8051

2006.2 Engenharia de Sistemas Embarcados 10

Organização de Memória

• Espaço de memória não povoado– Não está associado a qualquer memória específica

EspaçoDados(RAM)

Heap Pilha

0xFFFFFFFF

2006.2 Engenharia de Sistemas Embarcados 11

Organização de Memória

• Espaço de E/S– Endereços dos dispositivos de E/S

EspaçoSistema

EspaçoCódigo

EspaçoDados(ROM)

EspaçoE/S

EspaçoDados(RAM)

Heap Pilha

0x00000000

0x00000400

0xFFFFFFFF

2006.2 Engenharia de Sistemas Embarcados 12

Ciclo de Resposta de Interrupção

• Desvio de controle assíncrono– Como a CPU sabe onde achar o código de interrupt

handling– O que é necessário fazer para se salvar e restaurar

o contexto do thread principal?– Quando as interrupções devem ser habilitadas?

2006.2 Engenharia de Sistemas Embarcados 13

Ciclo de Resposta de Interrupção do 8051

• Seqüência de eventos1. Programador habilita interrupções ativando bits de

flag2. Circuito interno ou externo causa a geração de um

dos sinais de interrupção3. A CPU termina a execução da instrução atual

1. Coloca o PC na pilha2. Carrega o PC com o endereço do interrupt handler

4. Rotina de interrupção é executada e deve desativar o bit de flag da interrupção

5. Ao final da rotina de interrupção deve haver uma instrução de RTI. O PC é restaurado a partir da pilha e a execução do programa é retomada

2006.2 Engenharia de Sistemas Embarcados 14

O Registrador de Função Especial Interrupt Enable (IE)

Bit Nome

Endereço

Descrição

7 EA 0xAF Habilitação global de interrupção

6 - 0xAE Indefinido5 - 0xAD Indefinido4 ES 0xAC Habilita interrupção serial3 ET1 0xAB Habilita interrupção timer 12 EX1 0xAA Habilita interrupção externa 11 ET0 0xA9 Habilita interrupção timer 00 EX0 0xA8 Habilita interrupção externa 0

2006.2 Engenharia de Sistemas Embarcados 15

O Registrador de Função Especial Interrupt Priority (IP)

Bit Nome

Endereço

Descrição

7 - - Indefinido6 - - Indefinido5 - - Indefinido4 OS 0xBC Prioridade interrupção serial3 PT1 0xBB Prioridade interrupção timer 12 PX1 0xBA Prioridade interrupção

externa 11 PT0 0xB9 Prioridade interrupção timer 00 PX0 0xB8 Prioridade interrupção

externa 0

2006.2 Engenharia de Sistemas Embarcados 16

Prioridade de Interrupção por Hardware

• É utilizada quando interrupções de mesma prioridade acontecem simultaneamente

• Prioridades por hardware no 80511. Interrupção externa 02. Overflow do timer 03. Interrupção externa 14. Overflow do timer 15. Porta serial

2006.2 Engenharia de Sistemas Embarcados 17

Handlers de Interrupção

Fonte de Interrupção Endereço do Handler

Interrupção externa 0 0x0003

Overflow do timer 0 0x000B

Interrupção externa 1 0x0013

Overflow do timer 1 0x001B

Porta serial 0x0023

2006.2 Engenharia de Sistemas Embarcados 18

Chamadas de Função e Frames de Pilha

ProgramaC Compilador Assembly

main() gcc/sdcc _main

return gcc/sdcc RET*

*8051 pode variar para outras arquiteturas

2006.2 Engenharia de Sistemas Embarcados 19

Chamadas de Função e Frame de Pilha

• Em geral ação do compilador é:1. Colocar todos os argumentos na pilha2. Chamar a função3. Alocar espaço (na pilha) para as variáveis locais4. Realizar o trabalho da função5. Desalocar o espaço das variáveis locais6. Retornar da função7. Desalocar os espaço utilizado pelos argumentos

2006.2 Engenharia de Sistemas Embarcados 20

Chamadas de Função e Frame de Pilha

• Endereço de retorno da subrotina são colocados automaticamente na pilha

• Chamada de subrotina pela instrução call no 8051

• Atividade– Fazer um programa exemplo em C compilá-lo com

a opção compile only “-c” e trazer a listagem do programa explicando-a

2006.2 Engenharia de Sistemas Embarcados 21

Ambiente de Execução

• Código de inicialização– É o software que faz a conexão entre entre a fase

de inicialização de hardware e a função main() do programa.

– Exemplo simples: JMP _main• Ações básicas de código de inicialização

– Verificação de integridade do sistema– Execução de teste de checksum de ROM– Execução de teste de RAM– Realocação de código da ROM para a RAM– Inicialização de registradores hardware– Set up do resto do ambiente C

• Importante– O código de inicialização é dependente da placa

onde o processador será utilizado. Por que?

2006.2 Engenharia de Sistemas Embarcados 22

Código de Inicialização uVision3

2006.2 Engenharia de Sistemas Embarcados 23

Atividade

• Grupos de 3• O que faz o código de inicialização do uVision3?• Existe código de inicialização no SDCC, o que ele

faz?

2006.2 Engenharia de Sistemas Embarcados 24

Biblioteca de Execução (Run Time Library)

• Composta de funções de suporte que simplificam a geração de código

• Exemplos– Função de operação ponto flutuante em

processador que não possui suporte em hardware– Rotina de salvamento de contexto em arquiteturas

com suporte a salvamento rápido de registradores• Rotinas da biblioteca padrão C fazem parte da

biblioteca de execução• São críticas em sistemas embarcados

– Eliminar aquelas que não são utilizadas reduz espaço em memória

2006.2 Engenharia de Sistemas Embarcados 25

Otimizações da Biblioteca de Execução

• Eliminação de funções• Substituição por funções mais simples• Exemplos

– Suporte a ponto flutuante– Suporte a saída formatada: printf()– Suporte a alocação dinâmica: malloc()

• Substituição de funções– Biblioteca de operações de ponto fixo– Funções de formatação específica

• printIntAsHex()• printStr()• etc

2006.2 Engenharia de Sistemas Embarcados 26

Otimizações da Biblioteca de Execução

• Funções de alocação dinâmica– Muitos sistemas não provêem suporte a alocação

dinâmica– Sistemas com RTOS podem prover suporte limitado

(funções mais simples)– Quando existe deve ser extremamente robusto– Projetista pode reimplementar funções como

malloc() para adaptá-la ao seu sistema

2006.2 Engenharia de Sistemas Embarcados 27

Alocação de Objetos

• Mover parte do código entre as memórias• Alocar parte do código para locais específicos

– Código de inicialização– Vetores de interrupção– Código em ROM ou EPROM– Dados em RAM

• Ligador (Linker)– Ferramenta primária para controlar alocação de

código– Assembler cria módulos relocáveis– Linker fixa os módulos relocáveis em endereços

físicos específicos

2006.2 Engenharia de Sistemas Embarcados 28

Objetos Relocáveis

• Módulos Relocáveis– Módulos que são alocados para o endereço “zero”

sempre– Assembler prepara tabela de símbolos relocáveis– Linker -> realoca os módulos para os endereços

finais– PIC -> position independent code é gerado por

alguns compiladores ou ligadores

2006.2 Engenharia de Sistemas Embarcados 29

Processo de Desenvolvimento de Software Embarcado

Arquivo fonteC/C++

CompiladorC/C++

ListagemFonte

ArquivosInclude

Arquivo FonteAssembly Assembler

ListagemFonte

MóduloObjeto

Relocável

Criar Bibliotecado usuário(Opcional)

LinkerMóduloObjeto

AbsolutoProgramadorDispositivo

SistemaDesenvolvimento

Alvo

Gerenciadorbiblioteca

BibliotecaUsuário

ArquivoComandos

Linker

MóduloObjeto

Relocável

MapaLink

2006.2 Engenharia de Sistemas Embarcados 30

Usando o Linker

• Entrada -> tabela de símbolos + linker command file

• Linker command file– Dá ao programador controle completo de como os

módulos serão ligados– Pode ser alterado pelo usuário

• Seções do Linker command file– Código de programa– Dados do programa– Misto de dados e programa– Dados em ROM

2006.2 Engenharia de Sistemas Embarcados 31

Espaço de Código de ROM como “Placeholder”

• Após inicialização do sistema• Executa algumas instruções iniciais (boot loader)• Move código da ROM e realoca-o na RAM• RAM mais rápida que a ROM• Boot Loader projetado e “linkado” para a ROM• Resto do código projetado e “linkado” para a

RAM, embora armazenado inicialmente na ROM

2006.2 Engenharia de Sistemas Embarcados 32

Compilador C51 Keil