1 Comentário

Biblioteca rápida de Timer, Delay e Timeout sem desperdícios

Timer

Dessa vez vou apresentar rapidamente uma biblioteca contendo rotinas de Timer, Delay e Timeout, e no final do post o código da biblioteca será divulgado por completo.

 

Ela usa apenas um timer, configurado para contar a cada microssegundo e as funções da biblioteca são ditas rápidas porque aceitam que o registrador contador dê overflow sem fazer uso de código condicional, ou seja, sem “if” para verificar se o contador deu overflow. Isso é feito usando uma subtração que elimina o efeito causado pelo overflow do contador, que é: 

 

 

Na biblioteca todas as verificações de delay e timeout usam essa subtração, por isso não é gasto tempo extra com verificações e as funções passam a ter um overhead independente do argumento e do valor do contador de tempo. Caso seja necessário saber esse overhead basta medir.

 

Só existe uma situação onde a subtração pode falhar: overflow duplo, entretanto essa situação é impossível por dois motivos:

  1. O argumento de uint32_t não permite a espera necessária por um duplo overflow;
  2. Um duplo overflow levaria: 2 x 2³² micro segundos, ou seja, 2 horas, 23 minutos e 10 segundos.

 

E conforme prometido, usem e abusem do código abaixo.

 

timer.h

 

 

timer.c

 

 
 
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Biblioteca rápida de Timer, Delay e Timeout sem desperdícios
Comentários:
Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Otavio Augusto Gomes
Otavio Augusto Gomes
08/06/2016 20:44

Olá Felipe. Era exatamente o que eu estava buscando! Por hora estava tentando fazer uma função delayUs utilizando instruções assembly para o meu Cortex-M4F, porém não gostei do resultado. Então passei a usar um Timer32 pra fazer o delayUs, mas essa sua implementação parece mais elegante que a minha, e por isso passarei a usar essa sua. Muito obrigado pelo artigo!
Abraço.

Talvez você goste:

Séries

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link