Pessoal, boa tarde,
tenho visto aqui vários códigos postado ( e talvez eu mesmo o tenha feito),
sem se preocupar com a convenção usada pelo C ao definir variáveis.


Sei que isto é muito claro para os experientes, mas para aqueles que usam
os códigos de maneira "hobista", ou não fizeram algum treinamento em programação,
podem ter dificuldade em entender como e quando usar estas definições.

Segue abaixo uma "tabela" com os vários tipos de dados possíveis para uma variável,
e anexo um código para demonstrar em uso, mostrando o que acontece quando se usa uma
variável definida como "unsigned" ou não.

E usei neste código, a definição de int ( unsigned int e int), mas a idéia vale também
para unsigned char, e unsigned long, pois só muda a escala de valores.

Rui

             Dado    tamanho        definição
          boolean -- (8 bit)    - lógica true / false (verdadeiro/falso);

               byte -- (8 bits)   - número sem sinal 0 a 255;
               Char -- (8 bit)    - número com sinal de -128 a 127;
 unsigned char -- (8 bit)     - o mesmo que 'byte';

               word -- (16 bits) - número sem sinal 0 a 65535;
                  int -- ((16 bit)   - número com sinal de -32768 a 32767;

    unsigned int -- 16 bit)   - o mesmo que "word";

                long -- (32 bit)   - número com sinal de -2.147.483.648 a 2.147.483.647;
  unsigned long -- (32 bit)   - número sem sinal de 0 a 4,294,967,295;

                float -- (32 bit)  - número com sinal de -3.4028235E38 para 3.4028235E38.

O float no Arduino não é nativo, recomenda-se evitá-lo.


fonte: https://learn.sparkfun.com/tutorials/data-types-in-arduino

Exibições: 2404

Anexos

Responder esta

Respostas a este tópico

Pois é, inclusive os exemplos do site oficial e da IDE cometem erros de desperdício de memória, como quando usam int para acumular o numero do port de IO.

Quando temos um microcontrolador de 8 bits para trabalhar com 16 é preciso fazer "por partes", isso mais que dobra o tempo de execução de um comando. Se for sem necessidade pra mim é erro.

O Float muitas vezes também pode ser substituido por um numero int.

Ex:

Sua leitura vai até 12,00V e precisa ser multiplicada por 1,25

Considere a leitura =12.000 (doze mil) e some a ela (1/4) = ela >>2.

L+=L>>2; // faz o mesmo que L=L*1,25f onde L teria que ser float.

Ou 12*1,564 pode ser

(12*1564)/1000  que também pode ser feito sem float.

Grande Rui, 

A minha bíblia é essa:

https://www.arduino.cc/en/Reference/HomePage

Mas vide:

https://www.arduino.cc/en/Reference/DigitalRead

Define pinagem com int. Pra quê ???

Para ledpin e inpin foram gastos 4 bytes, quando nenhum precisava ser gasto. Bastava usar constantes ou #defines.

Supondo pinos configuráveis dentro da aplicação ainda assim bastava byte.

Eduardo , acho que no exemplo a preocupação é com a didática e não eficácia do código.

ola boa noite a todos,

(OBS: boolean armazena em único bit 2¹ , tendo duas possibilidades 0 ou 1)

QUANDO USAR UM TIPO DADO ?

(tipo de dado)   (variável)   (conteúdo)       Declarar uma variável de forma simples.

        ...                     x         =    0 ;            Na maioria da vezes dependendo do conteúdo determinasse o                                                                      tipo de dado.

Ex.: quero usar o numeral cem

              char  x = 100 ;       // 100 esta na escala de -128 a 127    ou

unsigned char  x = 100 ;       // 100 esta na escala de     0 a 255     e assim para os demais

se você analisar o tamanho de armazenamento,

os tipos char e unsigned char ocupam menos espaço na memória, apenas oito bit's, por isso nesse caso são os mais indicados, e dessa mesma forma se vai declarando outras variáveis e tentando ocupar menos espaço na memoria para que o programa fique enxuto.

MANIPULAÇÃO DE BIT'S FEITOS PELO PROGRAMA

um conjunto de bit's pode ter:     o primeiro bit para representar o sinal e os restantes destinados ao valor
                                                ou ter todos os bit's destinados a representar o valor

                                                                                                 tipo             armazenamento     conteúdo

                                                                                           de dado                          de bit's      possível

Por gentileza, me tira uma duvida, qual vantagem utilizar uma variável do tipo bool ? Sendo se ela ocupa o mesmo espaço de uma tipo byte ? Sempre achei que  a bool ocupava apenas um bit, 0 ou 1, mas estou vendo que não é assim..

Bom dia Tiago, 

A variável bol (boolean) é usada quando é necessário operações lógicas ( falso ou verdadeiro). 

https://www.arduino.cc/reference/en/language/variables/data-types/b...

Mas eu também consigo fazer isto com um byte, onde qualquer valor diferente de zero é verdadeiro e zero é falso, correto ?

No meu entender, o uso do Bool para verdadeiro e falso é recomendado por uma questão de semântica e melhor entendimento do programa. 

João é homem ou mulher ? - verdadeiro ou falso ( ou usando Byte = 1 ou 0 ?) .

Qual que fica melhor?

No caso do uso do Byte, pode gerar dúvida. 

Imagine se Homem = 0 e mulher = 1. 

Sim, com certeza, foi só uma colocação. Eu perguntei isso porque estou com problemas de falta de memoria, e pensei em usar variáveis tipo bool para economizar espaço, achando eu que elas ocupassem um único bit (já que meus dados não possuem são apenas 0 ou 1), mas não é como pensei. Acredito não ser possível isto pois o endereço de memoria se refere a uma posição de 8bits, correto?

Bom dia TLM,

você está correto,

na implementação doC pelo  pessoal do Arduino, uma variavel bool ocupa um byte.

Devem existir outras implementações ou linguagens que ocupam 1 bit somente.

Mas a vantagem é que ao usar definir como bool, você tem certeza de ter somente

2 condições 0 ou 1, false ou true, LOW ou HIGH ,

enquanto que definindo como byte você pode ter 16 valores diferentes,

mas só um será  0/false/LOW, os outros 15 serão 1/true/HIGH.

RV

Para otimizar procure por definições em RAM que poderia estar em código. São valores que vc define como int ou byte e nunca mais muda. Para eles vc pode usar o define.

Ainda, se quiser usar bits como bits há solução.

Seja por lógica:

https://www.arduino.cc/en/Tutorial/BitMask

ou por bibliotecas:

https://www.arduino.cc/reference/en/language/functions/bits-and-byt...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço