Exite uma informação que é repassada a todos inclusive no próprio site do Arduino que está

equivocada. Está afirmação está baseada e fundamentada na própria constituição da libraria

do Arduino, no que se refere ao comando de definição do pino, "pinMode()", á saber:

#define uint8 unsigned char  // Define que uma "unsigned char" passará a ser referenciada

                                         // como "uint8".

O comando pinMode, é definido assim dentro da libraria, "pinMode(uint8,uint8)", portanto esta

função recebe valores do tamanho de uma "char" e não do tamanho de uma "int", como é visto

em vários programas.

Maneira correta de definir os pinos de I/Os, exemplo.:

#define Led    2

ou

const char Led = 2;

ou

const unsigned char Led = 2; 

Maneira incorreta, exemplo.:

unsigned int Led = 2;

ou

int Led = 2;

Cabe salientar que está maneira incorreta de definição gera outros problemas, sendo o

primeiro o uso de memória de programa e memória Ram e com isso aumenta o tempo

de execução de uma simples rotina.

Para testar isso eu criei um programa simples, defini um pino como saída e fiquei

ligando e desligando ele, para poder medir o tempo de execução, isto envolvendo

várias formas de definição do pino de I/O, com os seguintes resultados abaixo:

Exemplo 1: O pino foi definido da maneira usual (incorreta), conforme mostra a figura 1,

                   notem que o uso de memória de programa, que ficou em 892 bytes e

                   consumiu 11 bytes de memória Ram.

                   Já na figura 2, podemos ver o tempo de execução das instruções de ligar

                   e desligar o referido pino, que neste caso levou 5,36us. para ligar e desligar

                   o pino.

                                                                     Figura 1.

                                 Figura 2.

                                                             Figura 3.

                                   Figura 4.

Exibições: 272

Responder esta

Respostas a este tópico

Para completar, resolvi fazer uma comparação entre o CodeVisionAVR, para a mesma rotina que foi testado

acima e confesso, surpreendente a diferença.

Resultados: Memória flash utilizada no CodeVision 322 bytes, contra 854 Bytes no Arduino.

                  Memória Ram utilizado no CodeVision     0 Bytes, contra    9 Bytes no Arduino.

                  Velocidade no CodeVision  136ns, contra 504us.

Não precisa falar mais nada, segue abaixo as imagens do compilador e da medição do pulso.

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço