Página 1 de 1
RoundRobin RTX Keil

Enviado:
08 Jul 2011 07:51
por J
Estou fazendo alguns testes com o RTOS Keil e achei interessante. Confesso que antes de conhecer este recurso eu já fazia algo parecido com o Timer. Eu dividia o menino em contagens de tempos em main e ia gerenciando meu programa num conceito multitarefa, porém todas as funções tinham que ser otimizadas para não ficarem em loop (dava trabalho, mas ficava bom).
Agora com o RTOS (que gostaria de testar a tempos) tudo ficará mais profissional, acredito eu.
Minha dúvida é o seguinte: Utilizando RoundRobin devo utilizar interrupções normalmente (vou utilizar a serial por exemplo) ou é melhor criar uma task pra ficar monitorando o periférico ? (já ví em algum fórum, ou aqui mesmo alguém que fez isso). Gostaria de saber com quem já tem experiência o que é melhor.

Enviado:
08 Jul 2011 09:34
por cortex
eu utilizo uma task para cada tarefa, no caso da serial deixo uma task monitorando a interrupção, funciona blz!

Enviado:
08 Jul 2011 09:38
por barboza
Deixo uma tarefa para tratar os dados recebidos que via interrupção enviam mensagens do RTOS para a task em questão.

Enviado:
08 Jul 2011 11:07
por J
barboza escreveu:Deixo uma tarefa para tratar os dados recebidos que via interrupção enviam mensagens do RTOS para a task em questão.
Vamos ver se eu entendi: Eu crio uma Task para controlar a UART e na rotina da interrupção eu Inicializo essa Task. Logo que a transmissão/recepção termina eu desabilito a Task, é isso ??

Enviado:
08 Jul 2011 11:55
por barboza
J escreveu:barboza escreveu:Deixo uma tarefa para tratar os dados recebidos que via interrupção enviam mensagens do RTOS para a task em questão.
Vamos ver se eu entendi: Eu crio uma Task para controlar a UART e na rotina da interrupção eu Inicializo essa Task. Logo que a transmissão/recepção termina eu desabilito a Task, é isso ??
Pelo o RTOS você pode enviar mensagens para uma determinada tarefa.
Neste caso, no init você inicia a tarefa que ficará esperando pela mensagem com o conteúdo recebido da serial/int.
Algo tipo assim:
- Código: Selecionar todos
void init_tasks(void)
{
Start_Task1();
Start_Task2();
Start_Task3();
Start_Task_Serial();
}
void Task_Serial(void)
{
for (;;)
{
if (WaitMsg(x))
{
Trata o conteudo recebido
}
}
}
void Uart() interrupt x
{
if (RX)
{
send msg to task Serial;
}
}

Enviado:
12 Jul 2011 07:56
por J
Ok, fiz alguns testes aqui e entendí bem.
Estou com outra dúvida:
Após eu pressionar um botão, eu teria que acionar alguma função do RTOS (não sei se ela existe) que contasse um tempo até esse botão ser acionado novamente, ou seja, preciso após um evento saber o tempo exato que existe até que esse evento aconteça novamente.
Como poderia ser feito com o RTOS ?