Página 1 de 1

Salvar Double EEPROM

MensagemEnviado: 18 Mar 2020 20:18
por brasilma
Olá Colegas,

Qual a melhor forma de salvar e recuperar um double (4 bytes) da EEPROM?

Pensei em convertê-la em 4 bytes (ints) e salvar individualmente!

Qual a melhor forma de converter uma double em ints?

Obrigado!

Re: Salvar Double EEPROM

MensagemEnviado: 19 Mar 2020 07:25
por eletroinf
O que me vem em mente é fazer uma union com o seu float e um vetor char.
Aí salva e recupera da memória os valores do vetor que também dividem a memória com o float/double.
Veja se este tópico ajuda a esclarecer:
https://stackoverflow.com/questions/870 ... 69#8703069

Re: Salvar Double EEPROM

MensagemEnviado: 19 Mar 2020 08:13
por cfreund
Código: Selecionar todos
    float f;
    char *ptr = (char*)&f;
   
    eeprom_write(addr, ptr, sizeof(float)/sizeof(char));
    ...
    eeprom_read(addr, ptr, sizeof(float)/sizeof(char));

Re: Salvar Double EEPROM

MensagemEnviado: 19 Mar 2020 08:48
por xultz
Eu descobri meio que por acaso como acessar os bytes de uma variável maior, a sintaxe é super esquisita mas depois que você se acostuma fica natural e eu tenho usado o tempo todo.
Código: Selecionar todos
float origem;    // Essa é a variável que pretendo acessar os bytes individuais
unsigned char primeiro, segundo, terceiro, quarto;     // Aqui vou guardar os quatro bytes da variavel float
float destino;   // Depois vou colocar aqui os bytes, e o conteúdo no final será igual ao da variável origem

// Guardo o primeiro byte
primeiro = ( (unsigned char *)&origem )[0];

// Guardo os demais bytes, é só seguir a mesma lógica
segundo = ( (unsigned char *)&origem )[1];
terceiro = ( (unsigned char *)&origem )[2];
quarto = ( (unsigned char *)&origem )[3];

// Agora vou colocar os bytes na variável destino
( (unsigned char *)&destino )[0] = primeiro;
( (unsigned char *)&destino )[1] = segundo;
( (unsigned char *)&destino )[2] = terceiro;
( (unsigned char *)&destino )[3] = quarto;

Re: Salvar Double EEPROM

MensagemEnviado: 19 Mar 2020 09:12
por brasilma
Muito Obrigado a todos!!!

Vi também uma ideia assim para separar os bytes da Double:

dado[0]=dados & 0xff;
dado[1]=(dados>>8) & 0xff;
dado[2]=(dados>>16) & 0xff;
dado[3]=(dados>>24) & 0xff;

Ele filtra byte a byte com and "shifitando" para a direita!

Vou testar todas!!!

Abraços.

Re: Salvar Double EEPROM

MensagemEnviado: 21 Mar 2020 12:04
por brasilma
Com pequenas alterações todos procedimentos deram certo, consegui escrever e recuperar o mesmo número Double ou Long (em alguns casos precisei utilizar o Long)!

Acabei encontrando a biblioteca EEPROMex que permite a escrita/leitura direta de qualquer tipo de dado na EEPROM, porem pretendo fazer tudo de forma discreta mesmo!

EEPROMex: https://thijs.elenbaas.net/2012/07/exte ... or-arduino

Abraços e Obrigado novamente e todos!!!