Você está na página 1de 0

Desenvolvimento com o ATmega8

Prof. Geovany A. Borges


gaborges@ene.unb.br
Projeto de Sistemas Embarcados Microcontrolados
Departamento de Engenharia Eltrica
Universidade de Braslia
2
Microcontroladores RISC de 8 bits, arquitetura
Harvard
Alto desempenho:
Relgio: DC a at 20MHz (atualmente)
Uma instruo por ciclo de relgio (1 MIPS por MHz),
exceto salto, retorno de interrupo,...
32 registros de propsito geral: R0 a R31
130 instrues assembly
Baixo custo
Baixo consumo
Dispositivos de 1,8V a 5V
At seis modos de operao em baixo consumo
Linha AVR de microcontroladores ATMEL
3
Arquitetura escalvel: reusabilidade de cdigo
mesmo para dispositivos mais avanados
Desenvolvimento no sistema:
In-System Programming (ISP)
On-Chip Debugging (OCD)
Proteo de cdigo e dados
Famlias:
ATTiny: pouca memria flash (max. 2KB)
ATMega: mais memria flash (max. 256KB)
AVR32: microcontrolador/DSP de 32 bits (roda Linux!)
Linha AVR de microcontroladores ATMEL
4
Suporte:
Notas de aplicao (http://www.atmel.com)
Comunidade AVRFreaks (http://www.avrfreaks.net/)
Ferramentas de cdigo livre:
AVR-GCC toolchain
avrlib (http://members.home.nl/jmnieuwkamp1/AVRlib/)
FreeRTOS (http://www.freertos.org/)
Linha AVR de microcontroladores ATMEL
5
Caractersticas:
Memria:
8 KB de memria Flash ISP (10.000 ciclos de
escrita/apagamento)
512 B de EEPROM (100.000 ciclos de escrita/apagamento)
1 KB de RAM interna
Oscilador RC Interno
Vrias fontes de interrupo externas e internas
Cinco modos de baixo consumo
Cinco fontes de relgio do sistema
4,5 a 5V de operao, at 16MHz de relgio
Microcontrolador ATmega8
6
Caractersticas:
Encapsulamentos:
Microcontrolador ATmega8
7
Caractersticas:
Perifricos:
Dois contadores/temporizadores de 8 bits
Um contador/temporizador de 16 bits
RTC com oscilador prprio
Gerao por hardware de at trs canais PWM
Conversor A/D de 6 canais: 10-bits (4 canais) e 8-bits (2
canais)
Two-wire Serial Interface (TWI)
Interface serial USART
Interface serial SPI
Co-de-guarda com oscilador prprio
Comparador analgico interno
Microcontrolador ATmega8
8
Circuito de referncia e gravadora BSD:
Para insero em protoboard com desenvolvimento em
microcomputador PC com Windows98/2000/XP
Material de desenvolvimento
Fonte
Circuito de
referncia
Gravadora
BSD
9
Manual do dispositivo e notas tcnicas
Distribuio WinAVR
Toolchain avr-gcc (GCC significa GNU Compiler Collection):
Compiladores C/C++
Montador assembly (assembler)
Depurador
Linker
Binutils
Ambiente de desenvolvimento: Programmers Notepad
Gerenciadores da gravadora: avrdude e avrdude-gui
Documentao
Material de desenvolvimento
10
Nota tcnica
Desenvolvimento com microcontroladores Atmel AVR
CD de iniciao ao AVR:
preparado com ferramentas de hardware/software,
documentao e exemplos de programas.
Acessar o site:
http://www.ene.unb.br/~gaborges/recursos/embarcados/index.htm
Material de desenvolvimento
11
Iniciao rpida:
Instalar o WinAVR (Ferramentas - software\WinAVR). Se
houver uma verso anterior, desinstale-a.
Construir a gravadora BSD (Ferramentas - hardware\BSD
prog simples).
Configurar na BIOS do microcomputador a porta paralela
em modo Standard (SPP).
Construir o circuito de referncia (Ferramentas -
hardware\Circuito de referncia ATMega8)
Usar o Programmers Notepad para desenvolver o
projeto
Se necessrio, usar avrdude.exe (WinAVR\bin) para
alterar a configurao do microcontrolador
Usar avrdude-gui.exe (WinAVR\bin) para programar o
microcontrolador
Material de desenvolvimento
12
Core da CPU
Arquitetura
Detalhamento da CPU
13
Core da CPU
Registros de trabalho (8 bits)
Detalhamento da CPU
14
Core da CPU
Registro de Status
I : Habilitao global de interrupes
T : Bit auxiliar para instrues BLD (Bit LoaD) e BST (Bit STore)
H : Half Carry (usado em operaes com codificao decimal)
S : Sinal, S = N V
V : Overflow em complemento de 2
N : Indica resultado negativo
Z : Indica Zero
C : Vai um
Detalhamento da CPU
15
Core da CPU
Pilha
Formato decrescente:
instruo PUSH decrementa em 1 a pilha
instruo POP incrementa em 1 a pilha
Instrues RET e RETI decrementam em 2 a pilha
Registros apontadores da pilha:
SPH:SPL deve ser iniciado na RAM acima do endereo 0x060
Detalhamento da CPU
16
Memria voltil de dados (registros+E/S+RAM)
Detalhamento da CPU
Perifricos +
Registros de acesso
EEPROM
17
Detalhamento da CPU
Memria de programa (FLASH)
8KB organizados em 4K x 16 bits
divididos em duas sees (instrues
so de 16 ou 32 bits)
10000 ciclos de escrita/apagamento
garantidos
Acessvel por instrues LPM/SPM (SPM
restrito)
Memria no voltil de dados
(EEPROM)
512B organizados em 512 x 8 bits
Acesso individual
Registros especficos de acesso
Escrita em 8,5 ms
Pode usar instrues SPM
para programar a seo
de aplicao, possibilitando boot remoto.
18
Relgio do sistema
Detalhamento da CPU
Sub-sistemas
Fontes de
relgio
19
Relgio do sistema
Oscilador a cristal de Quartzo/ressonador cermico
Faixa: alguns KHz - 16MHz
Conexo externa:
Preciso: muito boa, mas depende
do cristal e dos capacitores externos
Oscilador a circuito RC externo
Faixa: alguns KHz - 12MHz
Conexo externa:
Freqncia: 1/(3RC)
Preciso: depende em grande parte
da preciso do componentes externos
Detalhamento da CPU
20
Relgio do sistema
Oscilador a circuito RC interno calibrado
Freqncias: 1, 2, 4 e 8 MHz
Conexo externa: nenhuma
Preciso: 3% do valor nominal a 25
o
C
ajuste fino pelo registro OSCAL
Oscilador a cristal de Quartzo de baixa freqncia
Faixa: nominal para 32.768 Hz
Conexo externa: similar ao cristal externo
Preciso: depende em grande parte da preciso do
componentes externos
Capacitores externos desnecessrios se CKOPT = 0
Detalhamento da CPU
21
Relgio do sistema
Relgio externo
Faixa: DC a 16 MHz
Conexo externa:
Variao de 2% na freqncia entre dois
ciclos consecutivos podem levar a
comportamento imprevisvel
Detalhamento da CPU
22
Relgio do sistema
Configurao pelo Fuse Low Byte, acessvel apenas pela
gravadora.
Detalhamento da CPU
23
Relgio do sistema
Observaes:
Para todas as fontes de relgio, existe um tempo mnimo
entre o RESET e o incio de operao da CPU (alguns ms)
ATmega8 vem de fbrica configurado para relgio RC interno
calibrado a 1MHz
No modo com cristal de quartzo, a faixa de variao de
XTAL2 pode ser configurada conforme CKOPT:
CKOPT = 0: XTAL2 vai de 0 a V
DD
, aumentando a imunidade a
rudo externo e permitindo ser usada como fonte de relgio
para outros dispositivos. Entretanto, implica em aumento de
consumo.
CKOPT = 1: XTAL2 varia dentro de uma faixa estreita, reduzindo
a imunidade a rudo externo mas tambm reduzindo o
consumo.
Detalhamento da CPU
24
Gerenciamento de energia
Ativados quando a instruo SLEEP executada
Configurao pelo registro MCU Control Register (MCUCR)
SE : Habilita modos de economia de energia
SM2..0 : Seleo do modo, de acordo com a tabela abaixo:
Detalhamento da CPU
25
Gerenciamento de energia
Modos de economia de energia:
Detalhamento da CPU
26
Co-de-guarda
Se ativo, reinicia a CPU se seu contador interno estourar.
A instruo WDR reinicia o contador.
Estrutura interna:
Detalhamento da CPU
1MHz
Do registro
WDTCR
Instruo WDR
16,3ms a 2,2s
27
Interrupes
Vetores de interrupo e RESET
Detalhamento da CPU
28
Interrupes
Vetores de interrupo e RESET
Detalhamento da CPU
29
Interrupes
Priorizao: prioridade maior quanto menor for o
nmero do vetor de interrupo.
Cada locao do vetor deve conter uma instruo RJMP
para a funo de gerenciamento.
Para uma interrupo ser gerada e atendida pela CPU,
deve-se ter as trs condies abaixo:
A ocorrncia do evento que gatilha a interrupo,
colocando o bit local do registro de flags do perifrico em
1 (se houver registro de flags)
O bit de habilitao local da interrupo deve estar em 1
O bit de I (SREG) de habilitao global deve estar em 1
Detalhamento da CPU
30
Interrupes
Habilitao global de interrupes
Instruo SEI : seta o bit de I de SREG
Instruo CLI : reseta o bit de I de SREG
Comportamento do bit de SREG quando do atendimento
a uma interrupo:
I automaticamente colocado em 0 quando se inicia o
atendimento a uma interrupo.
I colocado em 1 quando se encerra o atendimento com a
instruo RETI.
Para permitir que uma interrupo seja atendida durante o
atendimento de uma outra interrupo, o bit I pode ser
setado no incio da rotina que ser interrompida.
Tempo de resposta para atendimento: 4 ciclos de relgio
(modo normal) a 8 ciclos (modo SLEEP).
Detalhamento da CPU
31
Interrupes
Locao na FLASH dos vetores de interrupo e RESET
Detalhamento da CPU
Vetores 2 - 19 Vetor 1
32
Registros de configurao
Acessveis apenas pela gravadora
Lock Bit Byte: registro que limita acesso externo e
interno memria FLASH e EEPROM.
Signature Bytes: trs bytes que identificam o fabricante,
dispositivo e tamanho da memria FLASH
Calibration Byte: contm 4 bytes de calibrao do
circuito oscilador RC interno, correspondentes s
freqncias nominais de 1, 2, 4 e 8MHz. O valor de
calibrao para 1MHz carregado automaticamente no
registro OSCCAL logo aps RESET. Para as outras
freqncias, OSCCAL deve ser alterado pelo programa.
Detalhamento da CPU
33
Registros de configurao
Fuse High Byte (default 11011001): controle sobre
(bit 7) RSTDISBL: Ativao do RESET externo
(bit 6) WDTON: Co-de-guarda
(bit 5) SPIEN: Programao em modo serial (o mesmo da
gravadora BSD)
(bit 4) CKOPT: Opes dos circuitos osciladores para
relgio do sistema
(bit 3) EESAVE: Memria EEPROM preservada durante
operao de apagamento na programao.
(bit 2..1) BOOTSZ1..0: Tamanho da seo de boot da Flash
(bit 0) BOOTRST: (1) Vetor de Reset na Flash ou (0) para
BLS.
Detalhamento da CPU
34
Registros de configurao
Fuse Low Byte: controle sobre pinos de E/S, durao da
inicializao e relgios do sistema.
Detalhamento da CPU
35
Obteno de imagens [Li & Yao, 2003]
Desenvolvimento de software
36
Componentes de um projeto de software em C:
Arquivos fonte (.c/.cpp)
Arquivos cabealho
Arquivo makefile
Projetos com um nico arquivo fonte:
Indicados para pequenos programas
Requerem clareza na escrita e comentrios sobre as
funes
Projetos com vrios arquivos fonte:
Geralmente refletem uma construo modular e mais
elegante da resoluo do problema
Cada arquivo fonte deve ter um arquivo cabealho
correspondente (boa prtica), em que so definidas as
funes acessveis por outros mdulos
Desenvolvimento de software
37
Exemplo: Projeto com um nico arquivo fonte.
Arquivo main.c: (1/2)
Desenvolvimento de software
38
Exemplo: Projeto com um nico arquivo fonte.
Arquivo main.c: (2/2)
Desenvolvimento de software
39
Exemplo: influncia do estilo de programao na
compreensibilidade (1/2).
Desenvolvimento de software
40
Exemplo: influncia do estilo de programao na
compreensibilidade (2/2).
Desenvolvimento de software
41
Procedimentos para programao modular em C
Identificao dos mdulos de um projeto
Cada mdulo deve ser auto-suficiente
Definio das funcionalidades e dependncias
Definio de rotinas de inicializao, interface, internas e
de encerramento dos mdulos
Cada mdulo possui um arquivo fonte e um arquivo
cabealho
Implementar mdulos reutilizveis
Realizar documentao, ao menos no cdigo durante sua
concepo
Desenvolvimento de software
42
Exemplo:
Sistema de aquisio de dados de sensor de temperatura
com visualizao em display LCD alfanumrico e
comunicao RS232 com microcomputador. No
microcomputador, um software residente solicita de
forma assncrona a ltima medio de temperatura.
Desenvolvimento de software
43
Exemplo:
Realizao fsica:
Identificao dos mdulos:
Mdulo principal
Mdulo sensor
Mdulo lcd
Mdulo serial
Desenvolvimento de software
Sensor de
Temperatura
ATmega8
Conversor
TTL-RS232C
Display LCD
44
Exemplo:
Mdulo principal:
Arquivos: main.c
Funcionalidades:
Inicializao do sistema
Lao infinito em que realiza comunicao serial
Interrupo peridica (T = 5ms)
Dependncias: sensor, lcd e serial
Desenvolvimento de software
45
Desenvolvimento de software
Exemplo:
Mdulo principal:
Implementao
// arquivo main.c
#include sensor.h
#include lcd.h
#include serial.h
volatile double Temp;
volatile int Counter5msTicks=0;
void main(void)
{
init();
while(1){
for(Counter5msTicks=0;
Counter5msTicks<4;);
serial_dispatch(Temp);
lcd_printf(\rTemp = %f Celsius, Temp);
}
}
46
Desenvolvimento de software
Exemplo:
Mdulo principal:
Implementao
Inicializao do temporizador Funcionalidades locais:
serial_init(SERIAL_9600),
lcd_init();
sensor_init();
Chamadas externas:
void init(void)
++Counter5msTicks;
Funcionalidades locais:
Temp = sensor_read();
Chamadas externas:
SIGNAL (SIG_OUTPUT_COMPARE1A)
47
Desenvolvimento de software
Exemplo:
Mdulo serial:
Implementao
// arquivo serial.c
#include serial.h
// prottipos locais
char serial_receive(char *c, timeout_ms);
void serial_send_double(double valor);
// funes de interface:
void serial_init(int baudrate){...}
void serial_dispatch(double Temp){...}
// apenas funes locais:
char serial_receive(char *c, timeout_ms){...}
void serial_send_double(double valor){...}
// arquivo serial.h
// defines de interface
#define SERIAL_19200 2
#define SERIAL_9600 1
#define SERIAL_4800 0
// prottipos de interface
void serial_init(int baudrate);
void serial_dispatch(double Temp);
48
Desenvolvimento de software
Exemplo:
Mdulo serial:
Implementao
Inicializao da USART
Taxa dada por baudrate
8 bits, sem paridade, 1 stop
Funcionalidades locais:
Chamadas externas:
void serial_init(int baudrate)
status = serial_receive(&d,1);
se status = 0, retornar
se d = T, executar serial_send_double(Temp)
Funcionalidades locais:
Chamadas externas:
void serial_dispatch(double Temp)
se no chegar nada pela USART em timeout_ms, retorna 0
se chegar algo, escrever em *c e retorna 1
Funcionalidades locais:
Chamadas externas:
char serial_receive(char *c, timeout_ms){...}
49
Toolchain avr-gcc: GCC significa
avr-gcc/avr-g++: compiladores C/C++
avr-as: assembler
avr-gdb: depurador
avr-ld: linker
binutils: utilitrios que manipulam arquivos binrios
avr-adr2line: dado um endereo e um executvel, usa
informao de depurao para determinar qual
linha/arquivo fonte se encontra o cdigo que gerou as
instrues do executvel;
avr-ar: manipulador de arquivos, que altera, retira e coloca
partes de cdigo objeto;
avr-nm: lista smbolos contidos em um arquivo objeto;
avr-objcopy: copia partes de um arquivo objeto em outro;
avr-objdump: mostra informaes sobre um ou mais
arquivos objeto;
Desenvolvimento de software
50
avr-ranlib: gera um ndice do contedo de um arquivo
objeto e armazena o ndice nele mesmo. Isto orna mais
rpida a tarefa do linker;
avr-readelf: mostra informaes de um arquivo .elf
(executable and linking format);
avr-size: mostra o tamanho das sees e o tamanho total
do cdigo binrio contido em um arquivo objeto;
avr-strings: para um arquivo de entrada, imprime toda
seqncia de caracteres de comprimento maior ou igual a
4;
avr-strip: recria um arquivo objeto sem os smbolos;
make: automao do processo de compilao
Informaes na internet:
http://www.gnu.org/manual/manual.html
Desenvolvimento de software
51
Desenvolvimento de software
Procedimentos de construo da imagem
Construo em linha de comando
Formado da chamada de avr-gcc:
avr-gcc [options] file
opes normalmente usadas:
Inclui smbolos de depurao no cdigo, deixando-o muito maior, mas
permitindo depurao.
-g
Passa as opes options para o assembler (avr-as). -Wa,options
Otimizao, em que n=0,1,2,3 ou s o nvel. -00 sem otimizao. -01
otimizao com melhor compromisso entre velocidade e tamanho de cdigo.
O2 implica em maior otimizao de velocidade sem aumentar muito o
tamanho. O3 otimizao com uso de funes inline. Os implica em
otimizao de tamanho de cdigo.
-On
Quando usado como linker, inclui biblioteca libm.a (matemtica). Qualquer
biblioteca compilada se apresenta sob a forma limnome.a, e sua incluso no
projeto feita com lnome. Ldir especifica diretrio onde as bibliotecas devem
ser buscadas
-lm
Opes do compilador:
Define o nome do arquivo final da compilao.
-o main.o
Compilar apenas, gerando arquivo objeto alocvel
-c
52
Desenvolvimento de software
Procedimentos de construo da imagem
Construo em linha de comando
Formado da chamada de avr-gcc:
avr-gcc [options] file
opes normalmente usadas:
Maiores detalhes, consultar a documentao do WinAVR:
WinAVR/doc/avr-libc/avr-libc-user-manual/index.html
O endereo nnnn assumido como topo da pilha inicial -minit-stack=nnnn
Opes especficas para processadores AVR, obtidas por avr-gcc -target-help:
Processador ATmega8.
-mmcu=atmega8
Assume o tipo int de 8 bits
-mint8
53
Procedimentos de construo da imagem
Construo em linha de comando
Verso do compilador:
avr-gcc --version
Compilao
avr-gcc -c -mmcu=atmega8 -I. -O0
funsigned-char -funsigned-bitfields -fpack-
struct -fshort-enums -Wall -Wstrict-
prototypes -Wa,-adhlns=main.lst -std=gnu99
main.c -o main.o
O arquivo main.lst contm a listagem em assembly
Linker: obteno do arquivo main.elf (executable and
linking format)
Gerao do arquivo imagem: main.hex (intel hex)
Desenvolvimento de software
54
Automao dos procedimentos
Com o aumento de complexidade dos projetos, o
procedimento de compilao precisa ser automatizado.
Em muitos casos, obter um outro formato de imagem
pode implicar em muitas mudanas no processo de
construo.
Utilittio make.exe: um utilitrio de automao do
processo de compilao. Para tanto, ele faz uso de um
arquivo auxiliar (makefile), nico para cada projeto, que
especifica todo o processo de construo.
Desenvolvimento de software
55
Automao dos procedimentos
Arquivo makefile de demonstrao:
Consultar makefile.pdf para sua listagem.
Variveis:
MCU: define o microcontrolador (atmega8)
FORMAT: define o formato da imagem final (ihex)
TARGET: define o nome da imagem (main)
OPT: define o nvel de otimizao (0, 1, 2, 3 ou s)
SRC: deve conter a listagem de todos os arquivos fonte
CFLAGS: Flags do compilador avr-gcc.
AFLAGS: Flags do assembler avr-as.
LDFLAGS: Flags do linker avr-ld
e vrias outras...
Desenvolvimento de software
56
Automao dos procedimentos
Arquivo makefile de demonstrao:
Forma de chamada:
make rule
em que rule a regra usada. Para construir um projeto por
completo, deve-se digitar make all.
Formato de uma regra:
target ... : prerequisites ...
command
...
em que target o nome da regra (alvo da execuo dos
comandos), que nem sempre so arquivos. Se no um
arquivo, chama-se de PHONY target. prerequisites so
as regras ou arquivos que devem estar disponveis para a
execuo da regra. Se for uma regra, elas ser executada
antes da atual. Se for um arquivo, make procura pela regra
capaz de cri-lo. Se no existir, procura por um arquivo no
diretrio. command so os comandos executados por aquela
regra.
Desenvolvimento de software
57
Automao dos procedimentos
Arquivo makefile de demonstrao:
Exemplos de regras
Sem comandos (exemplo de PHONY target):
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
Compilar apenas arquivos .c:
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
Smbolos especiais: nem sempre alvos e pr-requisitos so
fixos, sendo necessrio usar as instncias das regras.
$< : primeiro pr-requisito da regra
$@ : alvo da regra
$(VARIABLE) : contedo da varivel VARIABLE.
Desenvolvimento de software
58
Automao dos procedimentos
Arquivo makefile de demonstrao:
Principais arquivos resultantes de make all:
main.lss: arquivo de listagem assembly, com detalhes de
converso de cdigo. Se a opo g estiver ativa em CFLAGS,
ento se ter tambm o cdigo C correspondente.
main.sym: listagem de todos os smbolos do alvo main.elf
main.o: arquivo objeto resultado da compilao de main.c
main.eep: arquivo ihex a ser gravado na EEPROM
main.elf: arquivo binrio ELF
main.d: arquivo de dependncias
Limpeza do projeto: make clean
Desenvolvimento de software
59
Sees de memria
Durante todo o processo de construo, o cdigo,
variveis e constantes so alocadas em segmentos
denominados de sees.
Sees comuns no AVR:
.text: seo com trechos de programa
.data: seo com constantes, usadas por variveis
inicializadas no cdigo.
.bss: seo com variveis globais ou variveis estticas, que
no possuem valor inicial nos programa. As variveis da
seo .bss recebem 0 durante o processo de inicializao
da imagem.
.noinit: o mesmo que .bss, mas as variveis no sero
afetadas durante a inicializao.
.eeprom: seo com variveis para a EEPROM
Desenvolvimento de software
60
Sees de memria
Constituio do objeto alvo [Li & Yao, 2003]
Desenvolvimento de software
61
Sees de memria
Mapeamento na memria [Li & Yao, 2003]
Desenvolvimento de software
O linker faz o mapeamento guiado
por um arquivo script.
62
Sees de memria
Contedo de um arquivo script do linker
Definio de sees: SECTIONS{...}
Definio do mapeamento de memria: MEMORY{...}
No caso do toolchain avr-gcc, os arquivos script se
encontram em \WinAVR\avr\lib\ldscripts
Para o ATmega8 (arquitetura avr4, mmcu=atmega8), o
arquivo default chama-se avr4.x:
Observa-se que o tamanho das memria RAM no
corresponde ao que se tem com o ATmega8: Cuidado!
Desenvolvimento de software
Incio da SDRAM
Incio da FLASH
63
Dissecando um projeto:
main.c:
Desenvolvimento de software
64
Dissecando um projeto:
Compilando: make all
Otimizao: -O0 (nenhuma)
Tamanho das sees: make sizeafter
Tamanho do programa na FLASH: .text + .data
Espao usado pelas variveis na RAM: .data + .bss
Desenvolvimento de software
65
Dissecando um projeto:
Arquivo main.lss:
Cabealho
Desenvolvimento de software
66
Dissecando um projeto:
Arquivo main.lss:
Seo .text vetores de interrupo
Desenvolvimento de software
__bad_interrupt
__ctors_end
67
Dissecando um projeto:
Arquivo main.lss:
Seo .text seo de reset
Seo .text copia valores constantes de variveis inicializadas
Desenvolvimento de software
SP = 0x045F, topo da RAM
SREG = 0
X-Register = 0x0060 (RAM)
Z-Register = 0x00BA (FLASH,
aps final do programa)
Procedimento de cpia
68
Dissecando um projeto:
Arquivo main.lss:
Seo .text inicializa com 0 as variveis no inicializadas
explicitamente no programa fonte (seo .bss)
Seo .text rotina default de tratamento de interrupes
Desenvolvimento de software
X-Register = 0x008E
(incio da .bss na RAM)
Procedimento escrita de 0
nas variveis no iniciali-
zadas (np caso x)
Vetor de RESET, ou seja
RESET por software.
69
Dissecando um projeto:
Arquivo main.lss:
Seo .text funo main()
Desenvolvimento de software
Lao principal
SP = 0x045D, -2 do topo da RAM
Chamada de inicializacao()
70
Dissecando um projeto:
Arquivo main.lss:
Seo .text funo inicializacao()
Aparentemene no h motivo para salvar Y-Register na pilha!
Desenvolvimento de software
Salva Y-Register na pilha
Y-Register = endereo do topo da pilha
DDRB (mapeado em RAM) = 0x20
Restaura Y-Register da pilha
71
Dissecando um projeto:
Arquivo main.lss: recompilado com otimizao O2
Tamanho antes: 234 bytes (.text + .data + .bss)
Tamanho depois: 166 bytes (.text + .data + .bss)
nica (e enorme) diferena:
Arquivo main.lss: recompilado com otimizao Os
Mesmo resultado que compilao O2
Desenvolvimento de software
72
Depurao de software
Problemas da depurao de software em desenvolvimento
cruzado:
Observao tempo-real de eventos
Sincronismo
Passo-a-passo
Desenvolvimento de software
73
Depurao de software
Abordagens por hardware:
Usando emuladores de hardware
Emuladores com processador
Emuladores sem processador
Desenvolvimento de software
74
Depurao de software
Abordagens por hardware:
Usando depuradores no chip (e.g., JTAG)
Desenvolvimento de software
Baixo custo
75
Depurao de software
Abordagens por hardware:
Usando depuradores no chip (e.g., JTAG)
Depurador JTAG da ATMEL (acima ATmega16):
Funcionalidades: Run Mode, Stopped Mode, Breakpoints, Passo-a-
passo, visualizao de registros
Desenvolvimento de software
Ferramentas GNU:
GDB + AVARICE
76
Depurao de software
Abordagens por software:
Depuradores (e.g., GDB)
Simuladores (e.g., AVRStudio)
Sinalizao de eventos (Run mode apenas):
LEDs
Portas de E/S + Osciloscpio
Buzzer
printf direcionado para porta serial ou display LCD
Desenvolvimento de software
77
Depurao de software
Exemplo de sinalizao de eventos: printf
Desenvolvimento de software
78
Depurao de software
Exemplo de sinalizao de eventos: USE_DEBUG=1, OPT=s
Desenvolvimento de software
Coloca 0x0011 na pilha
Coloca 0x0015 na pilha
Chamada a printf
Onde est o if ???
Chamada a printf
Tamanho do cdigo: 2720 bytes
79
Depurao de software
Exemplo de sinalizao de eventos: USE_DEBUG=0, OPT=s
Desenvolvimento de software
Onde est o printf ???
Onde est o printf ???
Onde est o printf ???
Onde esto as chamadas a
funcao_a e funcao_b
80
Depurao de software
Limitaes no uso de printf para depurao:
Tempo de execuo longo
No avr-libc, printf no compilado como uma funo re-
entrante!
Desenvolvimento de software
81
Depurao de software
Exemplo de sinalizao de eventos: LEDs
Desenvolvimento de software
82
Depurao de software
Exemplo de sinalizao de eventos: USE_DEBUG=1, OPT=s
Desenvolvimento de software
.
.
.
DEBUG_POINT(0,1,1);
DEBUG_POINT(1,0,1);
DEBUG_POINT(0,1,0);
Tamanho do cdigo: 108 bytes
83
Especificidades da linguagem C GNU
Tipos de variveis e tamanho (arquitetura AVR)
[unsigned] char : 8 bits
[unsigned] int : 16 bits
[unsigned] long int : 32 bits
[unsigned] long long : 64 bits
Ponteiros: 16 bits
float, double: 32 bits
Desenvolvimento de software
84
Especificidades da linguagem C GNU
Variveis volteis
Aplicado em situaes em que o contedo de uma varivel
pode ser alterada sem que o compilador perceba que a
alterao possvel.
Casos em que se necessita declarar uma varivel como
voltil:
Registros de perifricos mapeados em memria
Variveis globais utilizadas em interrupes
Variveis globais utilizadas em sistemas multitarefas
Efeito: variveis volteis no so otimizadas (mesmo com -
O3)
Exemplos de declaraes:
volatile char c;
volatile float x = M_PI;
Desenvolvimento de software
85
Especificidades da linguagem C GNU
Funes inline
Desenvolvimento de software
86
Especificidades da linguagem C GNU
Funes inline
Desenvolvimento de software
Onde est a diferena?
87
Especificidades da linguagem C GNU
Funes re-entrantes (-D_REENTRANT)
Alguns sites reportam que as funes da biblioteca libc no
so re-entrantes. Portanto, deve-se evitar us-las
simultaneamente em interrupes e no nvel principal. Isto
somente pode ser feito se for garantida atomicidade na sua
execuo.
Aparentemente, no suportada para a arquitetura AVR
Desenvolvimento de software
88
Tipos inteiros para variveis (stdint.h)
Com sinal:
int8_t: inteiro 8 bits
int16_t: inteiro 16 bits
int32_t: inteiro 32 bits
int64_t: inteiro 64 bits
Sem sinal:
uint8_t: inteiro 8 bits sem sinal
uint16_t: inteiro 16 bits sem sinal
uint32_t: inteiro 32 bits sem sinal
uint64_t: inteiro 64 bits sem sinal
AVR-LIBC
89
Laos de espera (avr/delay.h)
Funes baseadas no nmero de ciclos de instruo
count: contagem de 4 ciclos de relgio
Contagem mxima determinada pelo tipo de count
AVR-LIBC
90
Gerenciamento de energia (avr/sleep.h)
Funes baseadas na instruo SLEEP
Definies para ATMEGA8 (em avr/sleep.h)
AVR-LIBC
91
Gerenciamento de energia (avr/sleep.h)
Exemplo: timerint1_ctc do CD de iniciao
AVR-LIBC
92
E/S padro (stdio.h)
Direcionamento:
Deve-se definir as funes bsicas de tratamento E/S de
caracteres
AVR-LIBC
No usado!
93
E/S padro (stdio.h)
Exemplo: terminal do CD de iniciao
AVR-LIBC
94
E/S padro (stdio.h)
Exemplo: terminal do CD de iniciao
AVR-LIBC
95
E/S padro (stdio.h)
Exemplo: terminal do CD de iniciao
AVR-LIBC
96
E/S padro (stdio.h)
Exemplo: terminal do CD de iniciao
AVR-LIBC
97
Registros de E/S (io.h)
Todos os registros so definidos pelo nome em io.h
Manipulao de registros:
outb(PORTB, inb(PORTB) & 0xFE);
ou
PORTB &= 0xFE;
Manipulao de bits:
AVR-LIBC
98
EEPROM (avr/eeprom.h)
Funes de acesso EEPROM interna
AVR-LIBC
99
Interrupes e sinais (avr/interrupt.h e avr/signal.h )
Definio de rotinas de gerenciamento usando as macros
INTERRUPT() e SIGNAL().
Exemplos
SIGNAL (SIG_OUTPUT_COMPARE1A)
INTERRUPT(SIG_ADC)
Diferena entre INTERRUPT e SIGNAL:
INTERRUPT: a rotina inicia com uma instruo SEI
SIGNAL: a rotina inicia com todas as interrupes desabilitadas
(situao default do microcontrolador)
AVR-LIBC
100
AVR-LIBC
SIG_SPM_READY
SIG_2WIRE_SERIAL
SIG_COMPARATOR
SIG_EEPROM_READY
SIG_ADC
SIG_UART0_TRANS
SIG_UART0_DATA
SIG_UART0_RECV
SIG_SPI
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
SIG_OVERFLOW0
SIG_OVERFLOW1
SIG_OUTPUT_COMPARE1B
SIG_OUTPUT_COMPARE1A
SIG_INPUT_CAPTURE1
SIG_OVERFLOW2
SIG_OUTPUT_COMPARE2
SIG_INTERRUPT1
SIG_INTERRUPT0
__vector_default
Interrupes e sinais (avr/interrupt.h e avr/signal.h )
Identificadores de fonte de interrupo para ATmega8
Consultar tabela da pgina 44 do manual do ATmega8
101
AVR-LIBC
Outras facilidades
Suporte a Bootloader
CRC
Gerao de bit de paridade
Manipulao de blocos de memria da FLASH
Co-de-guarda
Operaes matemticas em ponto flutuante
Gerao de nmeros aleatrios
Manipulao de strings
Teste de caracteres
102
[Li & Yao, 2003] LI, Q.; YAO, C. Real-Time Concepts for Embedded
Systems. CMPBooks, 2003.
Referncias