• Nenhum resultado encontrado

elt024-12-ArquiteturaDeSistemasEmbarcados

N/A
N/A
Protected

Academic year: 2021

Share "elt024-12-ArquiteturaDeSistemasEmbarcados"

Copied!
29
0
0

Texto

(1)

Arquiteturas de sistemas embarcados

Prof.MSc.Rodrigo Maximiano Antunes de Almeida

Universidade Federal de Itajubá

(2)

Interrupção e Watchdog

(3)

Interrupção

Programa

Principal

Interrupção

Rotina de

Programa

Principal

Latência da Interrupção Acontece a

Interrupção da ISRInicio Continua o fluxodo programa

Tempo

Latência da Interrupção Fim da

(4)

Interrupção

ˆ

Quando uma interrupção é gerada, o programa é paralizado e

uma função de interrupção é executada

ˆ

Conversor AD: quando o resultado da conversão estiver

disponível para leitura.

ˆ

Porta B: quando algum dos bits congurados como entrada

altera seu valor.

(5)

Interrupção

Atenção

A função que irá tratar da interrupção não retorna nem recebe

nenhum valor

(6)

Interrupção

1 void Interrupcao(void) interrupt 1 {

2 if (BitTst(PIR1,0)) { /*codigo*/ } //overflow do TIMER1

3 if (BitTst(PIR1,1)) { /*codigo*/ } //comparação do TIMER2 com PR2 4 if (BitTst(PIR1,2)) { /*codigo*/ } //comparação do CCP1

5 if (BitTst(PIR1,3)) { /*codigo*/ } //fim de operação na porta paralela 6 if (BitTst(PIR1,4)) { /*codigo*/ } //fim de transmissão da Serial 7 if (BitTst(PIR1,5)) { /*codigo*/ } //recepção da Serial

8 if (BitTst(PIR1,6)) { /*codigo*/ } //fim de conversão do AD

9 if (BitTst(PIR1,7)) { /*codigo*/ } //leitura/escrita da porta paralela 10 if (BitTst(PIR2,0)) { /*codigo*/ } //comparação do CCP2

11 if (BitTst(PIR1,1)) { /*codigo*/ } //overflow do TIMER3

12 if (BitTst(PIR1,2)) { /*codigo*/ } //condição de Tensão Alta/Baixa

13 if (BitTst(PIR1,3)) { /*codigo*/ } //detecção de colisão no barramento 14 if (BitTst(PIR1,4)) { /*codigo*/ } //fim escrita na memoria flash 15 if (BitTst(PIR1,5)) { /*codigo*/ } //interrupção da USB

16 if (BitTst(PIR1,6)) { /*codigo*/ } //mudança na entrada de comparação 17 if (BitTst(PIR1,7)) { /*codigo*/ } //falha no oscilador

(7)

Interrupção

1 BitClr(RCON,7); //desabilita IPEN (modo de compatibilidade) 2 BitSet(PIE1,6); // liga a interrupção para o AD

3 BitSet(PIE1,5); // liga a interrupção para a recepção na serial 4 BitSet(INTCON,5); // liga a interrupção para o timer 0

5 BitSet(INTCON,3); // liga a interrupção para a porta B

6 BitSet(INTCON,7); //habilita todas as interrupções globais 7 BitSet(INTCON,6); //habilita todas as interrupções de periféricos

(8)

Interrupção

ˆ

O watchdog visa aumentar a segurança do projeto.

ˆ

Funciona como um temporizador

ˆ

Precisa ter seu contador constantemente reiniciado.

ˆ

Caso não seja reiniciado no tempo exigido, o watchdog reinicia

o microcontrolador

(9)

Interrupção

1 //code char at 0x300003 CONFIG2H = 0x00; // Watchdog controlado por software

2

3 #define CLRWTD() _asm CLRWDT _endasm 4

5 void main(void) interrupt 0

6 {

7 unsigned int i; 8 unsigned char temp; 9 TRISD=0x00;

10 PORTD=0x00;

11 BitSet(WDTCON,0); //liga o sistema de watchdog

12 for(;;) 13 { 14 PORTD++; 15 for(i = 0; i < 10000; i++) 16 { 17 CLRWTD(); 18 } 19 } 20 }

(10)

Arquiteturas de sistemas embarcados

(11)

Arquiteturas de sistemas embarcados

ˆ

É sempre interessante denir uma arquitetura para o software

ˆ

Dependendo dos requisitos do sistema pode-se usar desde uma

programação voltada apenas para a aplicação até um sistema

operacional

ˆ

Dentre as técnicas mais simples serão apresentadas três

alternativas

ˆ

One single loop

ˆ

Interrupt control system

(12)

One single loop

ˆ

One single loop

ˆ

É a estratégia utilizada até agora na disciplina

ˆ

Consiste em um loop innito dentro do qual todas as tarefas

são executadas

ˆ

Apenas as rotinas de inicialização acontecem antes dele

ˆ

Programação é mais simples

ˆ

Diculdade de garantir requisições temporais

(13)

One single loop

1 void main (void) interrupt 0

2 {

3 //declaração das variáveis 4 int ia, ib, ic;

5 float fa, fb, fc;

6 //inicialização dos periféricos 7 InicializaTeclado();

8 InicializaLCD(); 9 //único loop infinito

10 for(;;)

11 {

12 //chamada das tarefas

13 ia = LerTeclas(); 14 MudaDigito(ia,0);

15 AtualizaDisplay();//tem que ser executado pelo menos a cada 10(ms) 16 DebounceTeclas();

17 }

(14)

One single loop

1 void main (void) interrupt 0

2 {

3 //declaração das variáveis 4 int ia, ib, ic;

5 float fa, fb, fc;

6 //inicialização dos periféricos 7 InicializaTeclado();

8 InicializaLCD(); 9 //único loop infinito

10 for(;;)

11 {

12 //chamada das tarefas 13 ia = LerTeclas(); 14 EnviaDados(ia);

15 MudaDigito(ia,0);

16 AtualizaDisplay();//tem que ser executado pelo menos a cada 10(ms) 17 DebounceTeclas();

(15)

Interrupt control system

ˆ

Interrupt control system

ˆ

Visa resolver o problema das restrições temporais

ˆ

Apenas alguns sub-sistemas podem ser operados via

interrupção

ˆ

Os demais sistemas operam no loop principal

ˆ

Facilita a expansão do sistema, já que as interrupções não

dependem do loop principal

ˆ

Ótima alternativa para sistemas que tem como requisito o

baixo consumo de energia

(16)

Interrupt control system

1 //rotina de tempo via interrupção 2 void Interrupcao(void) interrupt 1 {

3 if (BitTst(INTCON,2)){ //TIMER0: Overflow 4 BitClr(INTCON,2); //limpa a flag

5 ResetaTimer(5000); //5ms

6 AtualizaDisplay(); //tem que ser executado pelo menos a cada 8.3(ms)

7 }

8 }

9 void main(void){

10 int ia;

11 InicializaTeclado(); 12 InicializaDisplay(); 13 InicializaTimer();

14 //inicialização da interrupção

15 BitClr(RCON,7); //desabilita IPEN (modo de compatibilidade) 16 BitSet(INTCON,5); //liga a interrupção para o timer 0

(17)

Interrupt control system

Atenção

(18)

Interrupt control system

Atenção

(19)

Interrupt control system

Atenção

ˆ

Usar as interrupções apenas para rotinas simples, rápidas e

NECESSÁRIAS.

(20)

Programando multitasking de modo eciente

ˆ

Multitasking

ˆ

Multitasking é a capacidade de se executar mais de uma tarefa

simultâneamente.

ˆ

A maioria dos sistemas embarcados (por serem de baixo custo)

não possuem esta caracteristica

ˆ

A alternativa é discretizar o tempo e permitir que as tarefas

sejam executadas em janelas de tempo, de modo sequêncial.

ˆ

Se a alternância entre as tarefas for rápida o suciente, o

sistema apresentará o comportamento de multitasking

(21)

Programando multitasking de modo eciente

Exemplo de máquina de estados

Inicio

Ler

Teclado

Atualiza

Display

Escreve

Serial

Atualiza

Display

Ler Serial

Atualiza

Display

(22)

Programando multitasking de modo eciente

ˆ

Cada ciclo representa um estado do sistema, a tarefa

atualmente em execução

ˆ

Apos a fase de inicialização, o sistema entra num ciclo

ˆ

A transposição da máquina de estados para linguagem C pode

ser feita de modo simples através da estrutura Switch-Case

(23)

1 void main(void) interrupt 0{

2 char slot; 3 //Inicializa...

4 for(;;){ //inicio do loop infinito

5 //******************** top-slot ********************** 6 //*********** início da maquina de estado ************

7 switch(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 default:

21 slot = 0; break;

22 }

23 //************ fim da maquina de estado ************** 24 //****************** bottom-slot ********************* 25 } //fim loop infinito (!?)

(24)

Programando multitasking de modo eciente

ˆ

Deve-se notar que foram criadas três areas dentro de cada

ciclo

ˆ

A maquina de estado

ˆ

O top-slot

ˆ

O bottom-slot

ˆ

O aumento de tarefas se torna mais simples, basta adicionar

outro slot com a função desejada

ˆ

O bottom e top slots podem ser usados para tarefas que

deveriam ser realizadas em todos os ciclos como a

(25)

1 void main(void) interrupt 0{ 2 char slot;

3 //Inicializa...

4 for(;;){ //inicio do loop infinito

5 //******************** top-slot **********************

6 AtualizaDisplay();

7 //*********** início da maquina de estado ************ 8 switch(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 default:

16 slot = 0; break;

17 }

18 //************ fim da maquina de estado ************** 19 //****************** bottom-slot ********************* 20 } //fim loop infinito (!?)

(26)

Programando multitasking de modo eciente

ˆ

Uma boa prática é temporizar os slots

ˆ

Deste modo cada ciclo tem o mesmo tempo para executar

ˆ

Isto gera previsibilidade no funcionamento do sistema

(27)

1 void main(void) interrupt 0{

2 char slot; 3 //Inicializa...

4 for(;;){ //inicio do loop infinito

5 //******************** top-slot ********************** 6 ResetaTimer(5000); //5 ms para cada slot

7 AtualizaDisplay();

8 //*********** início da maquina de estado ************ 9 switch(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 default:

17 slot = 0; break;

18 }

19 //************ fim da maquina de estado ************** 20 //****************** bottom-slot ********************* 21 AguardaTimer();

22 } //fim loop infinito (!?)

(28)

Programando multitasking de modo eciente

Exemplo da mudança de slots no tempo

Top S.1 S.2 S.3 Bottom "vago" 0 5 10 15 20 25 30

(29)

Programando multitasking de modo eciente

Uso do tempo vago para as interrupçõ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

Referências

Documentos relacionados

dos FI estão, por sua própria natureza, sujeitos a flutuações de preços/cotações do mercado, aos riscos de crédito e liquidez e a variações de preços e

qualidade dos produtos fornecidos e responsabilizar-se pelo transporte dos produtos de seu estabelecimento até o local determinado pela CONTRATANTE, bem como pelo

Quando há uma força cortante V na seção, além do momento fletor M, a hipótese de Navier não vale mais, isto é, as seções empenam, deixando de ser planas. Assim, as

O termo diabetes mellitus descreve uma desordem metabólica de múltipla etiologia, caracterizado por hiperglicemia crônica decorrente de defeitos na secreção e/ou

30 As secretarias regionais têm prazo até o dia 4 de abril de 2016 para fornecer a listagem completa dos sindicalizados, via secretaria regional, às seções sindicais onde

A determinação da variação dimensional de barras de argamassa, conforme a NBR 13.583, foi utilizada para avaliar o potencial de mitigação do material ligante composto por cimento CP

No grupo controle, 7 indivíduos apresentaram positividade para os anticorpos anti-tireoidianos descritos acima (6,5%), sendo 2 deles com anti-TPO positivo, 2 com

- Alfredson, K.; Leo, K.; Picker, R.; Loftus, J.; Clark, K.; Wise, Victoria (2009); Applying International Financial Reporting Standards; Wiley; 2.ª edição. - Almeida, R.;