Escolar Documentos
Profissional Documentos
Cultura Documentos
Eletrónica e de Computadores
1º Ano – 1º Semestre – Ano Letivo 2013/2014
Sistemas Embebidos
e de Tempo-Real
Prof. Nuno Peixoto
(npeixoto@ipca.pt)
Desenvolvimento de Software
para Sistemas Embebidos
S. E. Tempo-Real
Sumário
Introdução
Ambientes de Desenvolvimento (IDEs)
Fluxo de Desenvolvimento de Software
Estruturas de Software
Tipos de dados em C
I/Os e Acesso aos Periféricos
Hardware Abstraction Layer (HAL) – Cortex
Microcontroller Software Interface Standard
(CMSIS)
Primeiro Projeto com CMSIS-Core no MDK-ARM
Biblioteca CMSIS-DSP
MEEC Prof. Nuno Peixoto 2
S. E. Tempo-Real
Introdução
Clicar aqui
Normalmente é
o código de
startup
fornecido pelo
fabricante do
MCU
Polling
Apenas para aplicações muito simples
O processador espera até que os dados estejam
prontos para processar e processa-os voltando a
esperar
Pode ser expandido para suportar vários
processos através daquilo a que se chama de
um super-loop
• Testa flags e executa o processo se estiverem
ativas
Polling
Desvantagens
• Quando as aplicações são mais complexas esta
técnica apresenta problemas severos de resposta
– Não consegue gerir prioridades
– Pode ter tempos de respostas demasiado lentos para
determinados periféricos
• Torna-se extremamente difícil manter o código
quando necessita de lidar com diversos periféricos
• Há um desperdício de energia imenso, já que o
processador está sempre a executar instruções
para, pelo menos, testar as flags
Polling
Dirigido à interrupção
Multitarefa
Quando as aplicações são mais complexas uma
estrutura de programa, mesmo com interrupções,
não é capaz de gerir os requisitos de
processamento
• Isto porque certas tarefas podem demorar muito
tempo a ser concluídas
• A única forma é executá-las de forma concorrente,
escalonando-as ao longo do tempo
• Pode-se implementar essa estrutura manualmente,
mas a complexidade é elevadíssima
• Solução: RTOS
MEEC Prof. Nuno Peixoto 30
S. E. Tempo-Real
Estrutura de Software
Multitarefa
O RTOS é utilizado para escalonar as diferentes
tarefas, que são no fundo funções
O RTOS proporciona mecanismos de
sincronização
• Semáforos
• Mutexes
O RTOS proporciona mecanismos de
comunicação
Um timer proporciona a chamada do escalonador
de tarefas que permite escolher a tarefa a executar
MEEC Prof. Nuno Peixoto 31
S. E. Tempo-Real
Estrutura de Software
Multitarefa
Introdução ao CMSIS
Foi desenvolvido pela ARM para proporcionar
aos fabricantes de microcontroladores e de
software uma infraestrutura de software
consistente para o desenvolvimento de soluções
para a família de processadores Cortex-M
• Mais de 15 fabricantes de MCUs
– Alguns providenciam FPGAs e ASICs
• Mais de 10 toolchains disponíveis
• Mais de 30 sistemas operativos!
• Bibliotecas adicionais para stack TCP/IP, codecs,
USB, etc.
MEEC Prof. Nuno Peixoto 49
S. E. Tempo-Real
CMSIS
Introdução ao CMSIS
É uma camada de abstração do hardware (HAL
– Hardware Abstraction Layer)
Permite efetuar o interface ao processador e aos
periféricos de forma simples e reutilizável,
mesmo para diferentes processadores Cortex-M
• Extremamente útil pois permite reduzir o tempo de
aprendizagem no que diz respeito à programação
do microcontrolador
É um standard que terceiros utilizam para efetuar
o interface entre o seu middleware e o
processador
MEEC Prof. Nuno Peixoto 50
S. E. Tempo-Real
CMSIS
Objetivos
Aumentar a reutilização de software
Aumentar a compatibilidade do software
Facilidade na aprendizagem
Independência da toolchain
Código aberto
Composição do CMSIS
CMSIS-Core
• Conjunto de APIs para acesso ao processador
Cortex-M
– Utilizada para desenvolver aplicações ou middleware
CMSIS-DSP
• Permite criar aplicações que necessitam de
operações do DSP, tais como filtros e FFT
CMSIS-SVD (System View Description)
• Ficheiro XML com descrição dos periféricos do
MCU
– Ótimo para os fabricantes de MCUs
MEEC Prof. Nuno Peixoto 52
S. E. Tempo-Real
CMSIS
CMSIS-Core
Inclui definições standard para acesso aos
periféricos do processador
Inclui funções e estruturas de dados para acesso
aos registos dos seguintes periféricos
• NVIC (Nested Vector Interrupt Controller)
• Timer SysTick
• MPU (Memory Protection Unit)
• SCB (System Control Block)
CMSIS-Core
Inclui definições standard dos nomes das
funções associadas aos vetores das exceções e
das interrupções
• Desta forma os nomes das rotinas de serviço às
interrupções estão já declaradas, basta definir a
função com o código que se pretende executar
– Assim o código é portável entre diferentes
processadores da série Cortex-M
Inclui funções para inicialização do sistema como
a SystemInit()
• Serve para iniciar relógios e efetuar configurações
MEEC Prof. Nuno Peixoto 55
S. E. Tempo-Real
CMSIS
Estrutura do CMSIS-Core
Utilização do CMSIS-Core
Adicionar os ficheiros com o código fonte da
inicialização
• É dependente da toolchain
– Estes ficheiros têm o nome system_<device>.c
Adicionar ficheiros específicos dos fabricantes
para acesso aos periféricos (opcional)
No caso da toolchain MDK-ARM existe um
assistente ao criar um novo projeto que permite
ativar os componentes que se prefere, já com
avisos de dependências
• Torna a o processo muito simples e intuitivo
MEEC Prof. Nuno Peixoto 57
S. E. Tempo-Real
CMSIS
Utilização do CMSIS-Core
É também necessário adicionar ficheiros com
código fonte específico do processador
• Por exemplo, core_cm4.c para o Cortex-M4
Adicionar ficheiros cabeçalho com as definições
dos endereços dos vários registos
• <device>.h
• system_<device>.h
• core_cm4.h
Exemplo do nome
do device:
stm32f4xx