View
226
Download
1
Category
Preview:
Citation preview
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
Recommended