Muito bom Carlos.
Este é um exemplo de código o qual usa técnicas profissionais de uso reduzido de memória e eficiência por economizar ciclos de busca de variáveis. Além de usar interrupção através de chamada direta pela função ISR. Gostei muito, parabéns.
Obrigado Celso!
Um detalhe pertinente que não está nesta versão, mas sim na outra é o uso do #define, uma diretiva
de compilação substituindo uma "int" na definição de um nome no lugar do número do pino, Ex.:
Em vez de usar:
int led1 = 30;
Use:
#define led1 30
Motivo, quando você usa uma int, você esta alocando um espaço de 2 bytes na memória
RAM sem necessidade, além de fazer com que os comandos que utilizem estas variáveis,
fiquem mas lento pois eles tem que acessar a RAM para ler o conteúdo, gastando mais ciclos
de máquina. Já utilizando a diretiva "#define", não será alocado nenhuma memória e durante
a compilação onde houver led1 sendo utilizado no seu Sketch, será substituído pelo número
que você atribuiu no #define.
Façam o teste, compile da forma tradicional e anotem quanto de RAM foi gasto e depois substitui
pela diretiva #define e verifique a diferença dos resultados, verão a diminuição no gasto de
espaço de memória RAM.
"int" para definir nomes aos pinos de I/Os, e a segunda tela, compilado usando a diretiva "#define",
notem nos resultados a diferença do espaço usado de memória RAM, além de ganhar isso e a
questão de velocidade, existe um outro aspecto muito mais importante, que é a segurança do
funcionamento, quando o endereço do pino esta dentro da memória RAM e esta sofrer uma
alteração inadvertida, acontecerá um acionamento errático de uma outra saída sem ser aquela
anteriormente planejada e programada no seu Sketch, isto só poderá acontecer se você usar a
maneira convencional, já no modo sugerido isto é fixo e imutável, pois foi colocado nas funções
dentro do Sketch que as utilizam e dentro da memória de programa.
Abaixo as telas com os resultados das compilações para o mesmo Sketch, compare e vejam
a diferença.
Carlos Machado,
Muito bom este tópico, precisamos incrementar o conhecimento de todos os participantes, para que não fiquem somente no estagio copia e cola, ou atrelados no conceito básico da IDE do Arduino.
Noto muito interessantes o exemplo do #define as pessoas estaõ acostumadas e condicionadas ao uso dos int, porque aprenderam que funcionam, mas na medida que comecem a implementar projetos que demandam memoria irão se encontrar como problemas sérios, já que como sabemos a memoria destes MCU é pouca se comparada a um computador por exemplo, 2 bilhões de operação e muito mais por segundo VS 2 mil operações, creio que todos devem começar a se interessar um pouco mais a partir de publicações como a sua, que visam elevar o conhecimento das pesoas.
Por outra parte, noto que esta usando a IDE da Atmel Studio 6.2 outra maneira de fazer as coisas de forma mais profissional e eficiente, e com o aumento de conhecimento sem limitações, também temos o VS da MS que merece um tópico creio.
Acredito que todo aquele que faz um blink e desfruta do momento, depois quer aprender a fazer um blink sem usar delay, e depois usando interrupção, na medida que vamos vencendo uma barreira queremos partir para a próxima, isso é típico do ser humano como tal, por isso bem vindo seu tópico e sua revista, e bem vindo seu proposito de espalhar seu conhecimento com outras colegas, isso é digno de admiração e merece o respeito de todos.
Parabéns e um grande abraço!
Obrigado Carlos pelos seus comentários!
Excelente !!
Carlos Machado. Parabéns.
Com esse Sketch até mesmo eu que tenho pouco conhecimento de programação e eletrônica consegui codificar o meu controle e " tbm entender o que esta acontecendo no código "..
Tbm o código esta todo comentado...rssrs...
Obrigado pelo post me ensinou muito ...
Grato ..
Obrigado Alex!
Gostei do vídeo!
Carlos.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por