[LHC] [GaroaHC] Re: Dúvida sobre interrupção no Arduino

Alejandro Mesias ale.mesias at gmail.com
Wed May 6 11:32:26 PDT 2015


Valeu pessoal, acabei fazendo um teste simples, tipo imprimir uma sequencia
de números e por interrupções no meio do caminho. E ele fazia a tarefa
completa.

O desafio aqui foi criar uma Roda Fônica [1] que gera sinais para uma
central de injeção eletrônica, essa roda fônica é quase um PWM, mas a cada
X ciclos os últimos ciclos não pulsam, é como se fosse uma marcação.

Deu certo, consegui gerar a onda no osciloscópio e deixar imprimindo umas
bobagens na serial, 0 menor intervalo de ciclo que consegui foi 100us (na
verdade consegui 80us mas tremia muito).

[1] -
http://autoentusiastas.blogspot.com.br/2011/10/matemagica-da-roda-fonica.html

2015-05-06 13:33 GMT-03:00 DQ <dqsoft.blogspot at gmail.com>:

> Messias,
>
> O conceito de interrupção é justamente interromper o código que está sendo
> executado e depois retomá-lo exatamente onde parou. Dentro de certos
> parâmetros, a interrupção não é percebida pelo código que foi interrompido.
> Digo "dentro de certos parâmetros", pois ela vai consumir um tempo do
> processador e as ações que a rotina de interrupção executar podem
> interferir o que estava sendo executado. Estes são os principais desafios
> para o uso de interrupção: fazer rotinas rápidas e se proteger contra
> interferências.
>
> Note que a interrupção é no nível de linguagem de máquina, não no nível de
> linha de código C. Por exemplo, considere o código abaixo:
>
> uint32_t cont;
>
> void loop ()
> {
>    // um monte de coisa
>
>    cont = 100000;
>
>    // outro monte de coisa
>
>   if (cont == 0L)
>   {
>   }
>
>   // etc
> }
>
> // Rotina chamada pela interrupção de timer
>
> rotIntTimer ()
> {
>    if (cont != 0L)
>       cont--;
> }
>
> O teste cont == 0L requer várias instruções de máquina, pois é uma
> variável de 4 bytes e as instruções do ATmega trabalham com um byte de cada
> vez. A interrupção pode acontecer em qualquer ponto deste teste, o que pode
> causar um bug pois a rotina principal pode testar alguns bytes antes do
> decremento e outros depois. Uma forma de evitar isto é proteger o acesso a
> várias compartilhadas desabilitando as interrupções no programa principal
> durante o teste. A consequência é que isto aumenta o tempo para responder à
> interrupção.
>
> Na verdade este exemplo tem um outro erro: se você não disser nada o
> compilador não vai saber que uma rotina de interrupção pode alterar o valor
> de cont e vai otimizar considerando que o valor só é alterado pela
> atribuição. Para evitar isto é necessário usar o modificador volatile na
> declaração de cont.
>
> Em resumo (o assunto é extenso) interrupção é um recurso muito importante
> (eu diria até que essencial para uma programação limpa) mas requer vários
> cuidados.
>
> Obs: Já usei várias vezes a TimerOne e é muito boa.
>
> DQ
> Escrevendo rotinas de interrupção deste 1980.
>
>
>
> On Wednesday, May 6, 2015 at 12:40:29 PM UTC-3, Mesias wrote:
>>
>> Caros, estava lendo sobre esta biblioteca de Timer:
>> http://playground.arduino.cc/code/timer1
>>
>> Que cita esta outra biblioteca de Timer (mantida mais recente):
>> https://github.com/PaulStoffregen/TimerOne
>>
>>
>> Minha dúvida é a seguinte: se o Arduino sofre uma interrupção durante a
>> execução do "loop", ao retornar da interrupção ele para de onde estava ou
>> faz uma nova execução de "loop" ?
>>
>> --
>> ======================================
>> Alejandro Mesias André Nebra Perez
>> Java/Python/Js/Something else Developer
>> Twitter: @meszias
>> Linux User #442506
>> Campinas - SP - Brasil - South America
>> ======================================
>>
>  --
> .--. .- .-. .- .--. --- ... - .- .-. . ... -.-. .-. . ...- .- .--. .- .-.
> .- .... .- -.-. -.- . .-. ... .--. .- -.-. . ... .--. .- - --. --- --- --.
> .-.. . --. .-. --- ..- .--. ... -.. --- - -.-. --- --
> Regras da Lista: http://garoa.net.br/wiki/Lista:LeiaAntesDeClicarNoSend
> Para mais informações sobre o Garoa Hacker Clube acesse
> http://garoa.net.br
> Maiores opções sobre o Google Groups, visite:
> http://groups.google.com/group/hackerspacesp
> .--. .- .-. .- -- .- .. ... .. -. ..-. --- .-. -- .- . ... .- -.-. . ...
> ... . --- .-- .. -.- ..
> Epoch 0 <=> Fundação: 1298244863 s ~ 2.408064*10^52 tP (tempos de Planck)
>
>


-- 
======================================
Alejandro Mesias André Nebra Perez
Java/Python/Js/Something else Developer
Twitter: @meszias
Linux User #442506
Campinas - SP - Brasil - South America
======================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.tia.mat.br/pipermail/hsc-tia.mat.br/attachments/20150506/68ed1052/attachment.html>


More information about the HSC mailing list