Software">
Nothing Special   »   [go: up one dir, main page]

Firmware

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 53

Projeto de Sistemas Embarcados Microcontrolados

Departamento de Engenharia Elétrica


Universidade de Brasília

Introdução ao desenvolvimento
de firmwares

Prof. Geovany A. Borges


gaborges@ene.unb.br
Firmwares de sistemas embarcados
 O firmware é responsável por:
 Fazer inicialização básica do hardware (e.g., BIOS):
 Exemplo: Verificação da memória disponível;
 Exemplo: Configuração padrão E/S;

 Repassar o controle para um sistema operacional


(bootloader )

 Implementar as funcionalidades do sistema embarcado:


 Firmware estruturado: um único thread e interrupções por
hardware.
 Firmware baseado em kernel: várias tarefas e serviços em
execução.

2
Modalidades de desenvolvimento
 TARGET: para sistemas capazes de armazenar e
executar as ferramentas de desenvolvimento

3
Modalidades de desenvolvimento
 HOST e TARGET: ferramentas de desenvolvimento
cruzado em um microcomputador hospedeiro

4
Modalidades de desenvolvimento
 HOST, TARGET e unidade de armazenamento
removível: indicado para estágios iniciais de
configuração/otimização do kernel

5
Ciclo de desenvolvimento
 Requisitos: coleta de informações com o cliente.
 Funcionalidades, interface com usuário, desempenho,
custo, tamanho/peso, consumo...
 Especificação: requisitos colocados na linguagem
do projetista.
 Interfaces E/S, tempos de resposta, comunicação,
periféricos, interdependência entre as partes...

6
Ciclo de desenvolvimento
 Definição da arquitetura de hardware/software:
esboço na forma de diagrama de blocos dos
componentes de hardware e de software do
sistema.
 Hardware: Processador e interconexão com periféricos
 Software: Componentes de software, módulos,
bibliotecas.
 Escolha das ferramentas de desenvolvimento
 Hardware: kit de desenvolvimento, emuladores
 Software: sistema operacional, linguagem de
programação, bootloaders, IDE
 Ferramentas de projeto de esquemáticos/PCB
 Ferramentas de documentação

7
Ciclo de desenvolvimento
 Implementação: uso de ferramentas de auxílio ao
projeto
 Formalismos: Unified Modeling Language (UML), FSM
 Implementação de Hardware/Software
 Testes: verificação de adequação do sistema
conforme as especificações
 Integração de sistemas: implantação do sistema e
avaliação acerca da satisfação dos requisitos

8
Tópicos desenvolvidos para a disciplina
 Introdução à linguagem C
 Consultar documento linguagemC.pdf

 Desenvolvimento com o µC ATMega8


 Consultar documento desenvolvimentoATmega8.pdf

 Arquiteturas de firmwares
 Firmware estruturado
 Firmware baseado em Kernel

9
Firmware estruturado
 Organização genérica
RESET

Inicialização de registros

Inicialização primária
do hardware

S
Bootloader? Bootloader

Inicialização de
variáveis

Inicialização secundária
Laço principal ISR 1 ... ISR N
do hardware

10
Firmware estruturado
 Operações atômicas em regiões críticas
 Região crítica: segmento de código que não pode ser
interrompido.
 Exemplos:
 Variáveis globais compartilhadas entre diferentes níveis de
interrupção
 Funções não reentrantes
 Registros de E/S que possuem validade temporal (e.g,
contadores de temporizadores)
 Gerenciamento por softawre de handshake
 Acesso a uma seqüência de registros de um dispositivo de
hardware
 Conversão A/D “simultânea” de dois ou mais canais sem S-
H externo
 Solução para firmwares estruturados: desabilitar
globalmente a ocorrência de interrupções.
11
Firmware estruturado
 Operações atômicas em regiões críticas
 Exemplo: interrupções iniciando com bit I desabilitado
volatile unsigned int Counter1msTicks = 0;
volatile unsigned char DAOutput;

SIGNAL (SIG_OUTPUT_COMPARE1A) Vetor 7: maior prioridade


{
// Decrementa Counter1msTicks a cada interrupção se diferente de 0.
if(Counter1msTicks!=0){
--Counter1msTicks;
}
}

SIGNAL (SIG_2WIRE_SERIAL) Vetor 18: menor prioridade


{
do{
send_twi_digital_to_analogic(DAOutput);
delay(5);
}
while(!receive_twi_analogic_to_digital_device());
}

12
Firmware estruturado
 Operações atômicas em regiões críticas
 Exemplo: interrupções iniciando com bit I desabilitado

void delay(unsigned int time_ms) // limitado em até 65535 ms.


{
unsigned int counter = 1;

ENTER_CRITICAL();
Counter1msTicks = time_ms;
LEAVE_CRITICAL();
while(counter>0){
sleep_mode();
ENTER_CRITICAL();
counter = Counter1msTicks;
LEAVE_CRITICAL();
}
}

13
Firmware estruturado
 Operações atômicas em regiões críticas
 Exemplo: soluções para as macros de acesso
 Solução 1
#define ENTER_CRITICAL() cli()
#define LEAVE_CRITICAL() sei()
 Solução 2
#define LOCAL_CRITICAL_CONTROL() volatile char cSREG
#define ENTER_CRITICAL() cSREG = SREG; cli()
#define LEAVE_CRITICAL() SREG = cSREG

void delay(unsigned int time_ms)


{
unsigned int counter = 1;
LOCAL_CRITICAL_CONTROL();

ENTER_CRITICAL();

.
.
.
14
Firmware estruturado
 Quantização e overflow em operações
 Considera-se o problema da obtenção da grandeza medida pela
leitura de um conversor A/D

Sistema T Sensor 10 mV/oC Amplificador 50 mV/oC Conversor A/D X


LM35CZ
Térmico G=5 10 bits, Vref=5V

T
Tmax T = K·X + a
(Tmax -Tmin)
K=
(Xmax -Xmin)

a = Tmax- K·Xmax = Tmin- K·Xmin

Tmin
T = K·(X-Xmin) + Tmin

Xmin Xmax X

15
Firmware estruturado
 Quantização e overflow em operações
 Considera-se o problema da obtenção da grandeza medida pela
leitura de um conversor A/D (ponto flutuante)
 Solução 1 : T = K·(X-X
min) + Tmin

#define Xmax 1023


#define Xmin 0
#define Tmax 99.90234375 /* Temperatura para Xmax */
#define Tmin 0.0 /* Temperatura para Xmin */

float convert_temperature(unsigned int X)


{
return (Tmax - Tmin)*(X - Xmin)/(Xmax - Xmin) + Tmin;
}

Problema de quantização

16
Firmware estruturado
 Quantização e overflow em operações
 Considera-se o problema da obtenção da grandeza medida pela
leitura de um conversor A/D (ponto flutuante)
 Solução 2 : T = K·(X-X
min) + Tmin

#define Xmax 1023


#define Xmin 0
#define Tmax 99.90234375 /* Temperatura para Xmax */
#define Tmin 0.0 /* Temperatura para Xmin */

float convert_temperature(unsigned int X)


{
return ((Tmax - Tmin)*(X - Xmin))/(Xmax - Xmin) + Tmin;
}

17
Firmware estruturado
 Quantização e overflow em operações
 Considera-se o problema da obtenção da grandeza medida pela
leitura de um conversor A/D (ponto fixo)
 Solução 1 : T = K·(X-X
min) + Tmin

#define Xmax 1023


#define Xmin 0
#define Tmax 100 /* Temperatura aproximada para Xmax */
#define Tmin 0 /* Temperatura aproximada para Xmin */

unsigned int convert_temperature(unsigned int X)


{
return ((Tmax - Tmin)*(X - Xmin))/(Xmax - Xmin) + Tmin;
}

Possível problema de overflow

18
Firmware estruturado
 Quantização e overflow em operações
 Considera-se o problema da obtenção da grandeza medida pela
leitura de um conversor A/D (ponto fixo)
 Solução 2 : T = K·(X-X
min) + Tmin

#define Xmax 1023


#define Xmin 0
#define Tmax 100 /* Temperatura aproximada para Xmax */
#define Tmin 0 /* Temperatura aproximada para Xmin */

unsigned int convert_temperature(unsigned int X)


{
unsigned long int aux;

aux = (X - Xmin);
aux = ((Tmax - Tmin)*aux); aux /=(Xmax - Xmin);
return ((unsigned int)(aux)) + Tmin;
}

19
Firmware estruturado
 Look-up tables (LUTs)
 Em algumas situações, em vez lugar de avaliar uma
função em tempo de execução, é preferível armazenar
resultados indexados em uma tabela e acessá-los quando
necessário.

Função: Look-up table:

x
y = f(x)

quantização i

yi

interpolação

y
tabela

20
Firmware estruturado
 Look-up tables (LUTs)
 Situações para as quais usa-se LUTs:
 Cálculo trigonométrico com inteiros (e.g., geração de uma
onda senoidal através de conversor D/A);
 Leitura A/D de variáveis de característica não-linear (e.g.,
leitura de termopares, RDTs);
 Máquina de inferência Fuzzy (e.g, controle Fuzzy);
 Conversão de código Gray para decimal (e.g., leitura de
codificadores ópticos absolutos);
 Leitura de interfaces de entrada (e.g., conversão de
scancodes de teclados em ASCII ou UNICODE).

 Exercício: geração de sinal PWM para acionamento de


motores monofásicos

21
Firmware estruturado
 Tópicos não abordados, mas importantes:
 Manutenção do tempo
 Medição de período/freqüência
 Leitura de dados por conversão A/D
 Máquinas de estado
 FIFOs
 Listas encadeadas

22
Firmware baseado em Kernel
 O que vem a ser um kernel ?
 Funcionalidades mínimas providas por um kernel:
 Gerenciamento de memória
 Gerenciamento de processos e comunicação entre
processos (IPC)
 Recursos de E/S
 Níveis de abstração (processadores avançados):
 Espaço usuário e espaço kernel
 Abstração dos dispositivos de E/S (UNIX e Linux)
 Abstração da camada de hardware: reduz dependência do
hardware, tais como unidade de gerenciamento de
memória, controladores de interrupção, temporizador,
DMA, controlador de tarefas, ...

23
Firmware baseado em Kernel
 Classificação de kernels: (wikipedia)
 Kernel monolítico:
 Todos os serviços estão no kernel

 Aspectos:
 (-) menor estabilidade: a falha de um serviço derruba o sistema;
 (+) se bem feito, alcança elevado nível de desempenho;
 Exemplos: Linux, Windows 95-98-Me

24
Firmware baseado em Kernel
 Classificação de kernels: (wikipedia)
 Microkernel:
 Serviços básicos:
 gerenciamento de memória
 processos e IPC

 Extensão por meio de servidores


 Aspectos:
 (+) maior estabilidade: a falha de um serviço não derruba o
sistema;
 (+) menor footprint e fácil de manter;
 (-) em geral, se sobrecarregam com mais facilidade;
 Exemplos: QNX, Minix, AmigaOS

25
Firmware baseado em Kernel
 Classificação de kernels: (wikipedia)
 Nanokernels:
 Controlam o fluxo de interrupções de hardware,
redirecionando-as para outros sofwares.
 Usados como forma de virtualização do hardware, permitindo
que vários sistemas operacionais co-existam ao mesmo tempo
 Limitações de uso de kernels clássicos para
sistemas embarcados:
 Tamanho de memória
 Não-determinismo de algumas funções
 Alto jitter para comutação de tarefas
 Escalonadores buscam maximizar o número de tarefas por
período de execução

26
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)

27
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Escalonador
 Associado a uma interrupção de temporizador de alta
prioridade e periodicidade constante.
 Responsável por:
 Atualização dos estados das tarefas
 Aplicação da política de escalonamento
 Execução das tarefas
 Chaveamento de contexto

28
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Tarefas: modelo e estruturas associadas

Estado, prioridade,
SP, ponteiros para
próximo TCBs
vizinhos na lista,...

Modelo POSIX
Em outros sistemas,
a tarefa se encerra
(return)

29
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Tarefas: estados

[Li & Yao, 2003] [Laplante, 1993]

Pode ser diferente conforme o sistema e o número de processadores


30
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Tarefas: exemplo

void tarefa1(void) void tarefa2(void)


{ {
for(;;){ for(;;){
printf(“Tarefa 1”); printf(“Tarefa 2”);
} }
} }

31
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Políticas de escalonamento: round-robin
Prioridade
Alta

Média

Baixa T1 T2 T3 T1 T2 T3 T1 T2 ...

Escalonador:

32
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Políticas de escalonamento: round-robin com prioridade
Prioridade
Alta

Média T5 T5

Baixa T1 T2 T3 T1 T2 T3 ...

Escalonador:

33
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Políticas de escalonamento: preemptivo
Prioridade
Alta T3 Encerramento

Média T2 T2 (cont.)

Preempção ...
Baixa T1 T1 (cont.)

Escalonador:

34
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Políticas de escalonamento: round-robin e preemptivo
Prioridade
Alta T6
Preempção Conclusão de T6
Continuação de T3
Média

Baixa T1 T2 T3 T3 T1 T2 ...

Escalonador:

35
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Políticas de escalonamento: exemplo (revisitado)

void tarefa1(void) void tarefa2(void)


{ {
for(;;){ for(;;){
printf(“Tarefa 1”); printf(“Tarefa 2”);
} }
} }

 Que padrões de saída espera-se ter quando...


 (a) escalonamento round-robin
 (b) escalonamento round-robin com prioridade (P2 > P1)

36
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Objetos que permitem lidar com o acesso a recursos
compartilhados
 Estrutura de um semáforo:

37
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Semáforo binário:

38
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Semáforo com contador:

39
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Mutex:

40
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Semáforos: implementações com bloqueio [Laplante, 1993]

_inline void Wait(unsigned char Status)


{
while(Status==TRUE);
Status = TRUE;
}

_inline void Signal(unsigned char Status)


{
Status = FALSE;
}

41
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Semáforos: implementações sem bloqueio [Stallings, 2001]

42
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Emprego de semáforos
 Sincronismo espera e sinaliza:

 Sincronismo espera e sinaliza de múltiplas tarefas:

43
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Emprego de semáforos
 Sincronismo com contagem de sinalização:

 Acesso a recurso compartilhado:

44
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Emprego de semáforos
 Múltiplo acesso a recurso compartilhado:

45
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Semáforos
 Exemplo: recurso stdout compartilhado

void tarefa1(void) void tarefa2(void)


{ {
for(;;){ for(;;){ Sem semáforo
printf(“Tarefa 1”); printf(“Tarefa 2”);
binário
} }
} }

void tarefa1(void) void tarefa2(void)


{ {
for(;;){ for(;;){
wait(S); wait(S); Com semáforo
printf(“Tarefa 1”); printf(“Tarefa 2”);
binário
signal(S); signal(S);
} }
} }

46
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Message queues
 Permite a transferência de dados entre tarefas/processos
 Estrutura:

47
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Message queues
 Estados:

48
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Message queues
 Procedimento de uso:

49
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Message queues
 Emprego de message queues:
 Comunicação em sentido único sem inter-travamento:

 Comunicação em sentido único com inter-travamento:


Mailbox: message queue
com comprimento 1

wait signal

Inicialmente 0
50
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Message queues
 Emprego de message queues:
 Comunicação em sentido duplo com inter-travamento:

51
Firmware baseado em Kernel
 Sistemas operacionais de tempo real (RTOS)
 Rate-monotonic schedulers: a prioridade de uma tarefa é
determinada em função de sua freqüência

 Outros tópicos:
 Processos
 Objetos de sincronismo: eventos

 RTOS para microcontroladores AVR:


 FreeRTOS: http://www.freertos.org/
 AvrX: http://www.barello.net/avrx/

52
Referências

[Li & Yao, 2003] LI, Q.; YAO, C. Real-Time Concepts for Embedded
Systems. CMPBooks, 2003.
[Laplante, 1993] Laplante, P.A. Real-Time Systems Design and
Analysis – an engineer’s handbook, IEEE Computer Society Press,
1993;
[Stallings, 2001] William Stalling, Operating Systems: Internals and
Design Principles, Prentice Hall, 2001.

53

Você também pode gostar