Pessoal, boa noite.

estou tentando me entender melhor com pointers e operadores de endereço (&),

e encontrei uma situação um pouco difícil para que eu entenda.

O sketch pode ser reduzido a somente 2 linhas dentro o setup().

1a linha:  -- >    int valor = 0x1234; 

2a. linha: -- >    int addr = &valor; 

Ao compilar usando as plataformas Arduino, não tem problema, compila corretamente,

mas ao compilar usando a plataforma ESP8266 tenho o seguinte erro na segunda linha:

 " invalid conversion from 'int*' to 'int' [-fpermissive]  "

Esta é uma operação normal em C e tem até como exemplo em: (foo = &myvar;)

http://www.cplusplus.com/doc/tutorial/pointers/

Alguém já experimentou este problema ou sabe sabe explica-lo?

Agradeço antecipadamente qq ajuda.

RV

Exibições: 87

Responder esta

Respostas a este tópico

Obrigado Eduardo,

o compilador está chiando é de int com int*.

(na verdade o int do ESP8266 realmente são 4 bytes e não 2 como no Atmega).

para referir a 2 bytes no ESP tem-se que usar short int. o uso do operador de endereço (&),

já define por sim um formato tamanho int.

RV

Boa tarde RV, tudo bem?

O seu problema é que você está declarando que uma variável do tipo inteiro vai receber um endereço.

Nem sempre, um inteiro é capaz de receber um endereço pois a diferença de tamanho em bits pode torná-los incompatíveis.

O endereço de memória do ESP8266 é de 32 bits e o do Arduino é de 16 bits.

Como regra geral, em C é incorreto usar o tipo int para conter um endereço de memória. Até já vi usarem o long mas ocorreto é declarar como ponteiro.

Portanto, nesta afirmação:

"Esta é uma operação normal em C e tem até como exemplo em: (foo = &myvar;)"

É somente válida se foo for declarado como ponteiro.

Boa sorte,

  'Eiju

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço