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

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

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

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

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

Page 2: Engenharia de Sistemas Embarcados 2006.2 Aula 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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?

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

2006.2 Engenharia de Sistemas Embarcados 22

Código de Inicialização uVision3

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

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?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2006.2 Engenharia de Sistemas Embarcados 32

Compilador C51 Keil