Página 1 de 1

Dica do VonNilmam

MensagemEnviado: 04 Set 2019 10:56
por Guri
:D Venho muito humildemente compartilhar com todos os amigos algumas das minhas experiências com linguagem C. Essa dica foi feita com base no Mikroc.

Não sei se vai ajudar alguém, porém tenho observado uma coisa até que óbvia, mas que pode passar desapercebido e causar muitos transtornos.

Sempre que você utilizar uma variável LOCAL na interrupção e essa variável tiver que ser "manipulada" fora da interrupção, lembre-se de que variáveis LOCAIS, são utilizadas apenas naquele momento da sua execução, após isso ela é "descartada".

Exemplo:

"FORMA ERRADA" :cry:

Rotina utilizando a interrupção do TIMERx:
voide timer....}
rotina de interrupção....

Rotina comum que esta dentro da interrupção do TIMERx
void PiscaumLed()
{unsigned char Contador (essa variável é declarada localmente, aqui esta o problema)
if(Contador==100)
{
Contador=0;
PiscaLed=~PiscaLed;
}Contatdor++;
}

Notem que a a variável Contador foi declarada como LOCAL, note também que o protótipo void "PiscaumLed()" é uma rotina de chamada que tem uma "variável GLOBAL".
Caso você declare ela como LOCAL, como é o caso da rotina acima, acontecerá que a contagem dessa variável vai se perder.
O correto é fazer a declaração GLOBAL, ficando assim:

"FORMA CORRETA" :lol:

unsigned char Contador; (essa variável esta sendo declarada de forma GLOBAL).

Rotina comum que esta dentro da interrupção do TIMERx
void PiscaumLed()
{
if(Contador==100)
{
Contador=0;
PiscaLed=~PiscaLed;
}Contatdor++;
}

Peço desculpas se não consegui me expressar corretamente, espero que tenham entendido e ficarei muito feliz se apenas um amigo for beneficiado com esta dica...deixem seus comentários.