Ir ao conteúdo
  • Cadastre-se

Conceito de processo em tempo real e multi-tarefa


felipefpt

Posts recomendados

Como posso implementar em um microcontrolador sem necessariamente usar um RTOS?

Por exemplo, tenho uma saida PWM mas o duty é ajustado por um teclado, não posso interromper o PWM para ficar vigiando o teclado.

Ou mesmo, tenho uma saida PWM com ajuste de duty no teclado e que mostra o valor do duty em um LCD.

Como posso implementar isso sem interromper o PWM? Ou algum outro processo que precisa ser continuo no meu microcontrolador?

Link para o comentário
Compartilhar em outros sites

Como posso implementar em um microcontrolador sem necessariamente usar um RTOS?

Programando 100% em Assembly.

Como posso implementar isso sem interromper o PWM? Ou algum outro processo que precisa ser continuo no meu microcontrolador?

Isso não é possível.

o que voce deve fazer,e verificar os 'espaços' que a rotina PWM tem.

Usando Assembly,voce pode com precisão,implementar uma leitura do teclado em um momento em que o PWM esta 'ocioso'.

Um exemplo,um PWM por Software,fica dentro de um Looping e provavelmente a sua frequencia não será alta o bastante a ponto de não se ter um 'espaço' para outra rotina'.

Acredito que sua implementação não esta correta ou voce não está compreendendo.

Mesmo em C,voce pode utilizar uma rotina usando PWM e conseguir 'espaço' para outra,a menos que seja crítica a temporização de seu programa,voce consegue programar mesmo não sendo em Assembly.

Link para o comentário
Compartilhar em outros sites

Programando 100% em Assembly.

Isso não é possível.

o que voce deve fazer,e verificar os 'espaços' que a rotina PWM tem.

Usando Assembly,voce pode com precisão,implementar uma leitura do teclado em um momento em que o PWM esta 'ocioso'.

Um exemplo,um PWM por Software,fica dentro de um Looping e provavelmente a sua frequencia não será alta o bastante a ponto de não se ter um 'espaço' para outra rotina'.

Acredito que sua implementação não esta correta ou voce não está compreendendo.

Mesmo em C,voce pode utilizar uma rotina usando PWM e conseguir 'espaço' para outra,a menos que seja crítica a temporização de seu programa,voce consegue programar mesmo não sendo em Assembly.

Pensando mais cedo, tenho uma aplicação que executa uma tabela que atualiza as portas do uC desenhando uma senoide em um DAC. Eu estava utilizando um delay para determinar a frequencia da senoide, porém devo usar um timer e um algoritimo que execute as outras tarefas no espaço de tempo. Mesmo que execute por parte.

Link para o comentário
Compartilhar em outros sites

Usando um Timer,a prioridade de interrupção se sobre poe sobre as outras rotinas.

voce deve setar e recarregar um Timer para gerar uma interrupção no tempo que seria se estivesse usando um Delay,deste modo a rotina no Timer fica indenpendente do fluxo do programa,assim voce programar uma rotina qualquer,que pode estar num Looping,que seja de baixa prioridade,sem alteração na rotina que estiver dentro da interrupção do Timer.

É como um exemplo que costumo citar,voce pode estar navegando agora na net ou compilando um programa sem que isso atrase ou altere o horário do Windows na bandeja do sistema,pois o relógio é atualizado por uma interrupção.

Link para o comentário
Compartilhar em outros sites

Citação:

Como posso implementar em um microcontrolador sem necessariamente usar um RTOS?

Programando 100% em Assembly.

Hehehe, VTRX, aqui voce deu uma forçadinha na barra....:lol:

Esta afirmação não é totalmente correta.

Todas as linguagens de programação feitas para um microcontrolador podem ser utilizadas na implmentação dessa necessidade. Afinal, as interrupções foram criadas para isso, que é interromper um determinado programa quando algum outro evento pede a atenção do microcontrolador.

Só em casos bem raros de temporização muito crítica é que não temos alternativa para o uso do Assembly.

Por exemplo, tenho uma saida PWM mas o duty é ajustado por um teclado, não posso interromper o PWM para ficar vigiando o teclado.

A maneira como voce está fazendo o PWM pode ser alterada para permitir outros processos.

O seu microcontrolador pode fazer PWM por hardware, com várias interrupções que te auxiliam nesta tarefa, assim voce não precisa ficar o tempo todo cuidando desta tarefa.

Por exemplo, imagine que voce tem uma interrupção que é gerada ao fim do período do sinal PWM que indica que temos de inicializar um novo período, ( normalmente é uma simples "recarga" de alguns registros ...) , e também tem uma interrupção que é gerada quando alguma tecla é pressionada e sinaliza para o programa principal que tem uma nova tecla disponível. E por último, como voce está utilizando um display LCD, que é inerentemente lento para um microcontrolador, ele pode ser tratado em qualquer lugar do programa principal. E o programa principal pode passar novos valores para que o PWM seja alterado pela rotina de interrupção do PWM, a partir das informações recebidas pelo teclado. Acredite, isto é bem simples de se fazer.

Um microcontrolador tem tudo isso embutido no hardware, prontinho para ser usado, é só voce procurar aqui no Fórum mesmo, existem centenas de programas em várias linguagens que funcionam de maneira semelhante ao que descreví acima.

Se tiver alguma dúvida, sugiro dar uma olhada no projeto ARDUINO, onde voce terá centenas de programas escritos utilizando interrupções de tudo que é maneira, numa linguagem bastante parecida com o C.

Paulo

Link para o comentário
Compartilhar em outros sites

Hehehe, VTRX, aqui voce deu uma forçadinha na barra....

Veja,ASM é uma linguagem em tempo real(RealTime) pois ela segue as instruções do Microcontrolador na sequencia que o Micro executa e temporizaçãoes exatas.

As outras linguagem não são RealTime,veja.

voce pode programar um Timer em C,Basic para estourar em 1 segundo,mas a sequencia do seu programa não será calculada pois voce teria que analisar as instruções que o compilador gerou em ASM para saber exatamente quantos micros ou nanos segundos,depois que o Timer estourou,vai demorar as outras rotinas.

É por isso que se voce programar um relógio usando apenas programação e que não seja em ASM,o relógio ou adianta ou atrasa conforme vai passando o Tempo.

Para 'corrigir' isto foi implementado RTOS.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!