Engenharia de Sistemas Embarcados 2006.2
Aula 10: Salvo RTOS
Funções do Salvo
• Arquivos de cabeçalho próprio
• Nomenclatura
– Funções possuem prefixo OS ou OS_
Salvo Headers
Não fazem parte
do Salvo
2006.2
Engenharia de Sistemas Embarcados
2
OSInit()
• OSInit()  inicializa todas as estruturas do Salvo,
ponteiros e contadores;
Deve ser chamada antes de
qualquer outra função do
Salvo
Comportamento Imprevisto
2006.2
Engenharia de Sistemas Embarcados
3
OSSched()
• É o escalonador multitarefa do Salvo.
• São executadas tarefas que estão no estado elegível
• Cada chamada de OSSched()resulta na tarefa mais
elegível sendo executada até a nova mudança de
contexto dentro da tarefa
• OSSched()deve ser chamada repetidamente para que
o esquema de multitarefa continue
OSSched() deve ser executada
diretamente da função main() para um
uso mais eficiente da pilha de
chamadas e retornode função
2006.2
Engenharia de Sistemas Embarcados
4
Criando, Inicializando e Mudando Contexto de Tarefas
• Criação de tarefas
–
–
–
Cria um task control block
no estado parado
Tarefas podem ser criadas
em várias partes do
programa
Podem ser criadas antes
ou depois de iniciada a
multitarefa
Criação de
tarefas
2006.2
Engenharia de Sistemas Embarcados
5
Criando Tarefas
• Criação de Tarefas
–
–
–
–
OSCreateTask()
Endereço inicial
Ponteiro tcb
Prioridade
Criação de
tarefas
2006.2
Engenharia de Sistemas Embarcados
6
Mudando Contexto de Tarefas
• Mudança de Contexto
– OS_Yield() mudança de
contexto incondicional
– Requer o rótulo único
para a mudança de
contexto
– _OSLabel() geração de
rótulos únicos;
Geração
de rótulo
único
Mudança
de
contexto
• Exemplo
–
2006.2
Tutorial 3
Engenharia de Sistemas Embarcados
7
Usando Eventos para Melhorar o Desempenho
• OSCreateBinSem() => Cria um semáforo binário com
o ponteiro ecb especificado e valor inicial
• OSSignalBinSem() => sinaliza o semáforo binário.
Se não há tarefas esperando o sinal simplesmente
incrementa o valor do semáforo. Se tarefas esperam
pelo semáforo aquela de maior prioridade se torna
elegível
• OS_WaitBinSem() => utilizado para espera de
sinalização de semáforo.
– Se valor for zero tarefa vai para estado de espera
– Se valor for hum o semáforo é resetado para zero e a
tarefa continua a execução
– OS_ => indica que pode acontecer mudança de contexto
na chamada da função
2006.2
Engenharia de Sistemas Embarcados
8
Usando Eventos para Melhorar o Desempenho
• Atualizar porta
quando
necessário
• Tutorial 4
2006.2
Engenharia de Sistemas Embarcados
9
Usando Eventos para Melhorar o Desempenho
• Desempenho quase duas vezes maior
• Tarefa TaskShow() passa 97% do tempo esperando pela
sinalização de eventos
2006.2
Engenharia de Sistemas Embarcados
10
Atrasando um Tarefa
• Gerar atrasos precisos em
tarefas
• OS_Delay() atrasos em número
de ticks
• Após atraso tarefa no estado
elegível
• Precisa do Timer do sistema
Atraso em
tarefas
Habilitação de
interrupções
2006.2
Engenharia de Sistemas Embarcados
11
Timer do Sistema
• Define a resolução do da
temporização do sistema
• Utiliza
rotina
de
interrupção do timer
• Função OSTimer() deve
ser executada de maneira
regular
• OS_Delay() substitui a
chamada de OS_Yield()
para
a
mudança
de
contexto
2006.2
Engenharia de Sistemas Embarcados
Disparo do
Timer
12
Sinalização de Múltiplas Tarefas
•
•
•
•
OSCreateMsg() cria mensagens no Salvo
OSSignalMsg()
OS_WaitMsg()
OS_SetPrio()
– Mudança de prioridade com mudança de contexto
• OSSetPrio()
– Mudança de prioridade sem mudança de contexto
2006.2
Engenharia de Sistemas Embarcados
13
Download

Aula 10