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
Tags:
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
Boa noite,
Acho que o Celso matou a charada.
Ahh, e rescentemente a Espressif lançou ESP-Mesh
https://www.espressif.com/en/products/software/esp-mesh/overview
Sim
estamos nos norteando por este documento da Espressif.
Obrigado
Rui
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por