Buscar

elt024-13-ArquiteturaDeSistemasEmbarcados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 34 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Arquiteturas de sistemas embarcados
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba´
rodrigomax@unifei.edu.br
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 1 / 1
Interrupc¸a˜o e Watchdog
Revisa˜o
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 2 / 1
Interrupc¸a˜o
Programa
Principal
Rotina de
Interrupção
Programa
Principal
Latência da
Interrupção
Acontece a
Interrupção
Início 
da ISR
Continua o fluxo
do programa
TempoLatência da
Interrupção
Fim da 
ISR
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 3 / 1
Interrupc¸a˜o
Quando uma interrupc¸a˜o e´ gerada, o programa e´ paralizado e uma
func¸a˜o de interrupc¸a˜o e´ executada
Conversor AD: quando o resultado da conversa˜o estiver dispon´ıvel para
leitura.
Porta B: quando algum dos bits configurados como entrada altera seu
valor.
Timer 0: quando acontece overflow em seu contador
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 4 / 1
Interrupc¸a˜o
Atenc¸a˜o
A func¸a˜o que ira´ tratar da interrupc¸a˜o na˜o retorna nem recebe nenhum
valor
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 5 / 1
Interrupc¸a˜o
1 v o i d Interrupcao ( v o i d ) interrupt 1 {
2 i f ( BitTst ( PIR1 , 0 ) ) { /* c o d i g o */ } // o v e r f l o w do TIMER1
3 i f ( BitTst ( PIR1 , 1 ) ) { /* c o d i g o */ } // comparac¸ a˜o TIMER2 = PR2
4 i f ( BitTst ( PIR1 , 2 ) ) { /* c o d i g o */ } // comparac¸ a˜o do CCP1
5 i f ( BitTst ( PIR1 , 3 ) ) { /* c o d i g o */ } // f im e n v i o p o r t . p a r a l e l a
6 i f ( BitTst ( PIR1 , 4 ) ) { /* c o d i g o */ } // f im t r a n s m i s s a˜ o da S e r i a l
7 i f ( BitTst ( PIR1 , 5 ) ) { /* c o d i g o */ } // r e c e p c¸ a˜ o da S e r i a l
8 i f ( BitTst ( PIR1 , 6 ) ) { /* c o d i g o */ } // f im de c o n v e r s a˜ o do AD
9 i f ( BitTst ( PIR1 , 7 ) ) { /* c o d i g o */ } // l e i t u r a / e s c r i t a p a r a l e l a
10 i f ( BitTst ( PIR2 , 0 ) ) { /* c o d i g o */ } // comparac¸ a˜o do CCP2
11 i f ( BitTst ( PIR2 , 1 ) ) { /* c o d i g o */ } // o v e r f l o w do TIMER3
12 i f ( BitTst ( PIR2 , 2 ) ) { /* c o d i g o */ } // problema na t e n s a o (V)
13 i f ( BitTst ( PIR2 , 3 ) ) { /* c o d i g o */ } // c o l i s a˜ o no barramento
14 i f ( BitTst ( PIR2 , 4 ) ) { /* c o d i g o */ } // f im e s c r i t a na f l a s h
15 i f ( BitTst ( PIR2 , 5 ) ) { /* c o d i g o */ } // i n t e r r u p c¸ a˜ o da USB
16 i f ( BitTst ( PIR2 , 6 ) ) { /* c o d i g o */ } // mudanc¸a na comparac¸ a˜o
17 i f ( BitTst ( PIR2 , 7 ) ) { /* c o d i g o */ } // f a l h a no o s c i l a d o r
18 i f ( BitTst ( INTCON , 0 ) ) { /* c o d i g o */ } // mudanc¸a na PORTA B
19 i f ( BitTst ( INTCON , 1 ) ) { /* c o d i g o */ } // i n t e r r u p c¸ a˜ o e x t e r n a INT0
20 i f ( BitTst ( INTCON , 2 ) ) { /* c o d i g o */ } // o v e r f l o w no TIMER0
21 i f ( BitTst ( INTCON3 , 0 ) ) { /* c o d i g o */ } // i n t e r r u p c¸ a˜ o e x t e r n a INT1
22 i f ( BitTst ( INTCON3 , 1 ) ) { /* c o d i g o */ } // i n t e r r u p c¸ a˜ o e x t e r n a INT2
23 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 6 / 1
Interrupc¸a˜o
1 BitClr ( RCON , 7 ) ; // d e s a b i l i t a IPEN ( modo de c o m p a t i b i l i d a d e )
2 BitSet ( PIE1 , 6 ) ; // l i g a a i n t e r r u p c¸ a˜ o para o AD
3 BitSet ( PIE1 , 5 ) ; // l i g a a i n t e r r u p c¸ a˜ o para a r e c e p c¸ a˜ o na s e r i a l
4 BitSet ( INTCON , 5 ) ; // l i g a a i n t e r r u p c¸ a˜ o para o t i m e r 0
5 BitSet ( INTCON , 3 ) ; // l i g a a i n t e r r u p c¸ a˜ o para a p o r t a B
6 BitSet ( INTCON , 7 ) ; // h a b i l i t a t o d a s as i n t e r r u p c¸ o˜ e s g l o b a i s
7 BitSet ( INTCON , 6 ) ; // h a b i l i t a t o d a s as i n t e r r u p c¸ o˜ e s de p e r i f e´ r i c o s
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 7 / 1
Interrupc¸a˜o
O watchdog visa aumentar a seguranc¸a do projeto.
Funciona como um temporizador
Precisa ter seu contador constantemente reiniciado.
Caso na˜o seja reiniciado no tempo exigido, o watchdog reinicia o
microcontrolador
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 8 / 1
Interrupc¸a˜o
1 // Watchdog c o n t r o l a d o por s o f t w a r e
2 code char at 0x300003 CONFIG2H = 0x00 ;
3
4
5 #define CLRWTD ( ) _asm CLRWDT _endasm
6
7 v o i d main ( v o i d )
8 {
9 uns igned i n t i ;
10 uns igned char temp ;
11 TRISD=0x00 ;
12 PORTD=0x00 ;
13 BitSet ( WDTCON , 0 ) ; // l i g a o s i s t e m a de watchdog
14 f o r ( ; ; )
15 {
16 PORTD++;
17 f o r ( i = 0 ; i < 10000 ; i++)
18 {
19 CLRWTD ( ) ;
20 }
21 }
22 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 9 / 1
Arquiteturas de sistemas embarcados
Arquiteturas de sistemas embarcados
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 10 / 1
Arquiteturas de sistemas embarcados
E´ sempre interessante definir uma arquitetura para o software
Dependendo dos requisitos do sistema pode-se usar desde uma
programac¸a˜o voltada apenas para a aplicac¸a˜o ate´ um sistema
operacional
Dentre as te´cnicas mais simples sera˜o apresentadas treˆs alternativas
One single loop
Interrupt control system
Cooperative multitasking
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 11 / 1
One single loop
One single loop
E´ a estrate´gia utilizada ate´ agora na disciplina
Consiste em um loop infinito dentro do qual todas as tarefas sa˜o
executadas
Apenas as rotinas de inicializac¸a˜o acontecem antes dele
Programac¸a˜o e´ mais simples
Dificuldade de garantir requisic¸o˜es temporais
Escalabilidade, reuso e manutenc¸a˜o prejudicados
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 12 / 1
One single loop
1 v o i d main ( v o i d )
2 {
3 // d e c l a r a c¸ a˜ o das v a r i a´ v e i s
4 i n t ia , ib , ic ;
5 f l o a t fa , fb , fc ;
6 // i n i c i a l i z a c¸ a˜ o dos p e r i f e´ r i c o s
7 InicializaTeclado ( ) ;
8 InicializaLCD ( ) ;
9 // u´ n i c o l o o p i n f i n i t o
10 f o r ( ; ; )
11 {
12 // chamada das t a r e f a s
13 ia = LerTeclas ( ) ;
14 MudaDigito ( ia , 0 ) ;
15 //tem que s e r e x e c u t a d o p e l o menos a cada 10(ms)
16 AtualizaDisplay ( ) ;
17 DebounceTeclas ( ) ;
18 }
19 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 13 / 1
One single loop
1 v o i d main ( v o i d )
2 {
3 // d e c l a r a c¸ a˜ o das v a r i a´ v e i s
4 i n t ia , ib , ic ;
5 f l o a t fa , fb , fc ;
6 // i n i c i a l i z a c¸ a˜ o dos p e r i f e´ r i c o s
7 InicializaTeclado ( ) ;
8 InicializaLCD ( ) ;
9 // u´ n i c o l o o p i n f i n i t o
10 f o r ( ; ; )
11 {
12 // chamada das t a r e f a s
13 ia = LerTeclas ( ) ;
14 EnviaDados ( ia ) ;
15 MudaDigito ( ia , 0 ) ;
16 //tem que s e r e x e c u t a d o p e l o menos a cada 10(ms)
17 AtualizaDisplay ( ) ;
18 DebounceTeclas ( ) ;
19 ic = RecebeSerial ( ) ;
20 // na˜o cumpre r e q u i s i c¸ a˜ o t e m p o r a l por causa da
21
22 fa = 2 . 0 * ic / 3 . 1 4 ;
23 EnviaSerial ( fa & 0x00FF ) ;
24 EnviaSerial ( fa >> 8) ;
25 }
26 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 14 / 1
Interrupt control system
Interrupt control system
Visa resolver o problema das restric¸o˜es temporais
Apenas alguns sub-sistemas podem ser operados via interrupc¸a˜o
Os demais sistemas operam no loop principal
Facilita a expansa˜o do sistema, ja´ que as interrupc¸o˜es na˜o dependem
do loop principal
O´tima alternativa para sistemas que tem como requisito o baixo
consumo de energia
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 15 / 1
Interrupt control system1 // r o t i n a de tempo v i a i n t e r r u p c¸ a˜ o
2 v o i d Interrupcao ( v o i d ) interrupt 1 {
3 i f ( BitTst ( INTCON , 2 ) ) { //TIMER0 : O v e r f l o w
4 BitClr ( INTCON , 2 ) ; // l i m p a a f l a g
5 ResetaTimer (5000) ; //5ms
6 AtualizaDisplay ( ) ; //tem que s e r e x e c u t a d o p e l o menos a ←↩
cada 8 . 3 ( ms)
7 }
8 }
9 v o i d main ( v o i d ) {
10 i n t ia ;
11 InicializaTeclado ( ) ;
12 InicializaDisplay ( ) ;
13 InicializaTimer ( ) ;
14 // i n i c i a l i z a c¸ a˜ o da i n t e r r u p c¸ a˜ o
15 BitClr ( RCON , 7 ) ; // d e s a b i l i t a IPEN ( modo de c o m p a t i b i l i d a d e )
16 BitSet ( INTCON , 5 ) ; // l i g a a i n t e r r u p c¸ a˜ o para o t i m e r 0
17 BitSet ( INTCON , 7 ) ; // h a b i l i t a t o d a s as i n t e r r u p c¸ o˜ e s g l o b a i s
18 BitSet ( INTCON , 6 ) ; // h a b i l i t a t o d a s as i n t e r r u p c¸ o˜ e s de ←↩
p e r i f e´ r i c o s
19 f o r ( ; ; ) {
20 ia = LerTeclas ( ) ;
21 MudaDigito ( ia , 0 ) ;
22 }
23 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 16 / 1
Interrupt control system
Atenc¸a˜o
Usar as interrupc¸o˜es apenas para rotinas SIMPLES.
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 17 / 1
Interrupt control system
Atenc¸a˜o
Usar as interrupc¸o˜es apenas para rotinas simples e RA´PIDAS.
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 18 / 1
Interrupt control system
Atenc¸a˜o
Usar as interrupc¸o˜es apenas para rotinas simples, ra´pidas e
NECESSA´RIAS.
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 19 / 1
Interrupt control system
Interrupt control system
Pode ser utilizado como controle do loop principal
Auxilia em quesitos de temporizac¸a˜o
Permite criac¸a˜o de ”timers”artificiais
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 20 / 1
Interrupt control system
1 // v a r i a´ v e i s g l o b a l de c o n t r o l e
2 s t a t i c uns igned i n t tick ;
3 s t a t i c uns igned char loopControl ;
4
5 // r o t i n a de tempo v i a i n t e r r u p c¸ a˜ o
6 v o i d Interrupcao ( v o i d ) interrupt 1 {
7 i f ( BitTst ( INTCON , 2 ) ) { //TIMER0 : O v e r f l o w
8 BitClr ( INTCON , 2 ) ; // l i m p a a f l a g
9 ResetaTimer (5000) ; //5ms
10 AtualizaDisplay ( ) ; //tem que s e r e x e c u t a d o p e l o menos a ←↩
cada 8 . 3 ( ms)
11 tick++;
12 loopControl = 1 ;
13 }
14 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 21 / 1
Interrupt control system
1 v o i d main ( v o i d ) {
2 i n t ia ;
3 InicializaTeclado ( ) ;
4 InicializaDisplay ( ) ;
5 InicializaTimer ( ) ;
6 // i n i c i a l i z a c¸ a˜ o da i n t e r r u p c¸ a˜ o
7 BitClr ( RCON , 7 ) ; // d e s a b i l i t a IPEN ( modo de c o m p a t i b i l i d a d e )
8 BitSet ( INTCON , 5 ) ; // l i g a a i n t e r r u p c¸ a˜ o para o t i m e r 0
9 BitSet ( INTCON , 7 ) ; // h a b i l i t a t o d a s as i n t e r r u p c¸ o˜ e s g l o b a i s
10 BitSet ( INTCON , 6 ) ; // h a b i l i t a t o d a s as i n t e r r u p c¸ o˜ e s de ←↩
p e r i f e´ r i c o s
11 f o r ( ; ; ) {
12 loopControl = 0 ;
13 i f ( ( tick % 2) == 0) {
14 ia = LerTeclas ( ) ;
15 MudaDigito ( ia , 0 ) ;
16 }
17 i f ( ( tick % 3) == 0) {
18 DebounceTeclas ( ) ;
19 }
20 w h i l e ( loopControl == 0) ; // t imed l o o p
21 }
22 } ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 22 / 1
Programando multitasking de modo eficiente
Multitasking
Multitasking e´ a capacidade de se executar mais de uma tarefa
simultaneamente.
A maioria dos sistemas embarcados (por serem de baixo custo) na˜o
possuem esta caracter´ıstica
A alternativa e´ discretizar o tempo e permitir que as tarefas sejam
executadas em janelas de tempo, de modo sequencial.
Se a alternaˆncia entre as tarefas for ra´pida o suficiente, o sistema
apresentara´ o comportamento de multitasking
Uma das maneiras de projetar este tipo de co´digo e´ atrave´s de
ma´quinas de estado
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 23 / 1
Programando multitasking de modo eficiente
Exemplo de ma´quina de estados
Inicio
Ler
Teclado
Atualiza
Display
Escreve
Serial
Atualiza
DisplayLer Serial
Atualiza
Display
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 24 / 1
Programando multitasking de modo eficiente
Cada ciclo representa um estado do sistema, a tarefa atualmente em
execuc¸a˜o
Apos a fase de inicializac¸a˜o, o sistema entra num ciclo
A transposic¸a˜o da ma´quina de estados para linguagem C pode ser
feita de modo simples atrave´s da estrutura Switch-Case
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 25 / 1
1 v o i d main ( v o i d ) {
2 char slot ;
3 // I n i c i a l i z a . . .
4 f o r ( ; ; ) { // i n i c i o do l o o p i n f i n i t o
5 // ******************** top−s l o t **********************
6 // *********** i n ı´ c i o da ma´quina de e s t a d o ************
7 s w i t c h ( slot ) {
8 case 0 :
9 LeTeclado ( ) ; slot = 1 ; break ;
10 case 1 :
11 AtualizaDisplay ( ) ; slot = 2 ; break ;
12 case 2 :
13 RecebeSerial ( ) ; slot = 3 ; break ;
14 case 3 :
15 AtualizaDisplay ( ) ; slot = 4 ; break ;
16 case 4 :
17 EnviaSerial ( ) ; slot = 5 ; break ;
18 case 5 :
19 AtualizaDisplay ( ) ; slot = 0 ; break ;
20 d e f a u l t :
21 slot = 0 ; break ;
22 }
23 // ************ f im da ma´quina de e s t a d o **************
24 // ****************** bottom−s l o t *********************
25 } // f im l o o p i n f i n i t o ( ! ? )
26 } ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 26 / 1
Programando multitasking de modo eficiente
Deve-se notar que foram criadas treˆs a´reas dentro de cada ciclo
A ma´quina de estado
O top-slot
O bottom-slot
O aumento de tarefas se torna mais simples, basta adicionar outro
slot com a func¸a˜o desejada
O bottom e top slots podem ser usados para tarefas que deveriam ser
realizadas em todos os ciclos como a AtualizaDisplay() por exemplo
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 27 / 1
1 v o i d main ( v o i d ) interrupt 0{
2 char slot ;
3 // I n i c i a l i z a . . .
4 f o r ( ; ; ) { // i n i c i o do l o o p i n f i n i t o
5 // ******************** top−s l o t **********************
6 AtualizaDisplay ( ) ;
7 // *********** i n ı´ c i o da ma´quina de e s t a d o ************
8 s w i t c h ( slot ) {
9 case 0 :
10 LeTeclado ( ) ; slot = 1 ; break ;
11 case 1 :
12 RecebeSerial ( ) ; slot = 2 ; break ;
13 case 2 :
14 EnviaSerial ( ) ; slot = 0 ; break ;
15 d e f a u l t :
16 slot = 0 ; break ;
17 }
18 // ************ f im da ma´quina de e s t a d o **************
19 // ****************** bottom−s l o t *********************
20 } // f im l o o p i n f i n i t o ( ! ? )
21 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 28 / 1
Programando multitasking de modo eficiente
Uma boa pra´tica e´ temporizar os slots
Deste modo cada ciclo tem o mesmo tempo para executar
Isto gera previsibilidade no funcionamento do sistema
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 29 / 1
1 v o i d main ( v o i d ) {
2 char slot ;
3 // I n i c i a l i z a . . .
4 f o r ( ; ; ) { // i n i c i o do l o o p i n f i n i t o
5 // ******************** top−s l o t **********************
6 ResetaTimer (5000) ; //5 ms para cada s l o t
7 AtualizaDisplay ( ) ;
8 // *********** i n ı´ c i o da ma´quina de e s t a d o ************
9 s w i t c h ( slot ) {
10 case 0 :
11 LeTeclado ( ) ; slot = 1 ; break ;
12 case 1 :
13 RecebeSerial ( ) ; slot = 2 ; break ;
14 case 2 :
15 EnviaSerial ( ) ; slot = 0 ; break ;
16 d e f a u l t :
17 slot = 0 ; break ;
18 }
19 // ************ f im dama´quina de e s t a d o **************
20 // ****************** bottom−s l o t *********************
21 AguardaTimer ( ) ;
22 } // f im l o o p i n f i n i t o ( ! ? )
23 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 30 / 1
Interrupt control system
1 // v a r i a´ v e i s g l o b a l de c o n t r o l e
2 s t a t i c uns igned char loopControl ;
3
4 // r o t i n a de tempo v i a i n t e r r u p c¸ a˜ o
5 v o i d Interrupcao ( v o i d ) interrupt 1 {
6 i f ( BitTst ( INTCON , 2 ) ) { //TIMER0 : O v e r f l o w
7 BitClr ( INTCON , 2 ) ; // l i m p a a f l a g
8 ResetaTimer (5000) ; //5ms
9 loopControl = 1 ;
10 }
11 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 31 / 1
1 v o i d main ( v o i d ) {
2 char slot ;
3 // I n i c i a l i z a . . .
4 f o r ( ; ; ) { // i n i c i o do l o o p i n f i n i t o
5 // ******************** top−s l o t **********************
6 loopControl == 0 ;
7 AtualizaDisplay ( ) ;
8 // *********** i n ı´ c i o da ma´quina de e s t a d o ************
9 s w i t c h ( slot ) {
10 case 0 :
11 LeTeclado ( ) ; slot = 1 ; break ;
12 case 1 :
13 RecebeSerial ( ) ; slot = 2 ; break ;
14 case 2 :
15 EnviaSerial ( ) ; slot = 0 ; break ;
16 d e f a u l t :
17 slot = 0 ; break ;
18 }
19 // ************ f im da ma´quina de e s t a d o **************
20 // ****************** bottom−s l o t *********************
21 w h i l e ( loopControl == 0) ; // t imed l o o p
22 } // f im l o o p i n f i n i t o ( ! ? )
23 }
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 32 / 1
Programando multitasking de modo eficiente
Exemplo da mudanc¸a de slots no tempo
Top
S.1
S.2
S.3
Bottom
"vago"
 0 5 10 15 20 25 30 
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 33 / 1
Programando multitasking de modo eficiente
Uso do tempo vago para as interrupc¸o˜es
Top 1 1 1
S.1 3 3 3
Bottom 1 1 1
"vago" 3 3 3
Top 1 1
S.1 1 2 3 3
Bottom 1 1 1
"vago" 2 2 2
Interr. 1 1 1
ELT024 Arquiteturas de sistemas embarcados rodrigomax@unifei.edu.br 34 / 1

Outros materiais