18.05.2014 Views

SISTEMA EMBARCADO DE AQUISIC¸ ˜AO DE DADOS ...

SISTEMA EMBARCADO DE AQUISIC¸ ˜AO DE DADOS ...

SISTEMA EMBARCADO DE AQUISIC¸ ˜AO DE DADOS ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Tr = Tempo de Resposta<br />

Tempo de<br />

Espera<br />

Tarefa 1<br />

Tarefa 2<br />

ISR<br />

Instante da<br />

amostragem<br />

do flag<br />

Evento<br />

rti<br />

Instante da<br />

amostragem<br />

do flag<br />

Executando Dormindo Esperando<br />

Figura 7.2: Tempo de resposta em um scheduler de varredura contínua.<br />

por uma tarefa. A Figura 7.2 mostra como isto acontece num scheduler de varredura<br />

contínua. O evento é primeiramente detectado pelo circuito de interrupção. Então<br />

a rotina do serviço de interrupção seta o flag que é amostrado pela Tarefa 1. Se<br />

o flag é setado, a Tarefa 1 responde ao evento. Na figura, o evento ocorre no pior<br />

tempo possível, logo após a Tarefa 1 amostrar o flag do evento. Portanto o flag<br />

não é detectado até que a Tarefa 1 faça a próxima amostragem na próxima porção<br />

de tempo destinada a ela, e o tempo de resposta (Tr) é aproximadamente igual ao<br />

tempo de execução de todas as tarefas.<br />

O único modo de melhorar o tempo de resposta com um organizador de tarefa por<br />

divisão de tempo é colocar o código de serviço do evento na rotina de interrupção,<br />

mas isto faz o tempo de resposta para outras tarefas e interrupções ser mais longo.<br />

A Figura 7.3 mostra o tempo de resposta para um kernel preemptivo. Quando o<br />

Interrupt Service Routine (ISR) é completo, o controle necessariamente não volta a<br />

tarefa interrompida, que neste caso foi a Tarefa 2. O ISR libera a Tarefa 1 e como<br />

ela tem mais alta prioridade que a Tarefa 2, o kernel executa primeiramente a Tarefa<br />

1. Portanto, o tempo de resposta é efetivamente reduzido.<br />

Quando projetamos tarefas para um kernel preemptivo devemos ter em mente<br />

que as tarefas são executadas assincronamente e que qualquer tarefa pode ter sua<br />

193

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!