bom dia,

quando eu declaro uma variavel , ex: int x;

ela fica armazenada na ram. 

queria saber se eu declarar como constante , ex: const int x; ou #define

ela fica na flash ?? ou fica na ram?

estou sem espaco na ram e ja que algumas variaveis nao irao mudar, queria colocar na flash junto com o codigo do programa. 

eu posso colocar como const ou preciso utilizar o PROGMEM ??

Exibições: 306

Responder esta

Respostas a este tópico

Quando vc usa #define o compilador no momento da analise sintatica faz a troca, veja o exemplo

#define X 1

if(a == X)

  ...

Depois da analize sintática vai ficar assim

if(a == 1)

   ...

O processo de compilação ocorre da seguinte forma:

1. Analise sintática, verifica se o que foi escrito pode ser compreendido pelo compilador.

2. Analise semântica, verifica se o que foi escrito faz algum sentido para o compilador.

3. Transforma o que foi digerido no segundo passo em Código Objeto, pode variar aqui alguns compiladores transformam em código assembly para depois transformar em código de maquina, na verdade penso que todos fazem assim, mas meu  professores de compiladores colocou assim para mim.

4. Faz a linkagem transformando os códigos objeto em um executavel

entendi, mas o que eu quero fazer é guardar um array de char com 5000 caracteres.(uma imagem que sera tratada no programa)

nao posso colocar na ram pq nao tem espaco, so na flash.... entao queria saber se eu tenho q usar o PROGMEM ou posso declarar como const. se puder usar const, é mais facil de ler os valores. 

O #define nunca gasta RAM (como foi bem colocado pelo post acima).

O const tb não pode gastar RAM, não faz sentido, os dados ficam na flash. Dependendo do microcontrolador e do compilador pode ser que gaste um ou outro byte em função da rotina de busca desses dados. Mas em geral não.

Eduardo.

Cara como são muitos bytes, talvez esteja erra seria bom alguem com mais experiencia me corrigir, seria legal vc colocar uma EPROM externa ao MICRO para fazer este armazenamento e sim usar o PROGMEM. Falo isto pensando na estética do código e na usabilidade do circuito, imagine ai vc realizar 10k de testes isto torraria a EPROM do seu microcontrolador enquanto vc poderia produzir uma EPROM com esta cadeia e não precisaria gravar a cada novo teste.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço