Write float value in eeprom

For C and ASSEMBLY users to post questions and code snippets for programming in C and ASSEMBLY. And for any other C or ASM course related questions.

Moderators: Benj, Mods

Corto
Posts: 26
Joined: Thu Sep 04, 2014 7:01 am
Has thanked: 7 times
Been thanked: 6 times
Contact:

Write float value in eeprom

Postby Corto » Thu Feb 07, 2019 5:08 pm

Hello Benj,All,
I would like, for reasons of precision, to be able to memorize in the EEPROM for example a value U = 4.9542
I tried by creating a 16-bit shift variable, with a variable U as Integer
MSB = U >> 8
LSB = U
=> EEVAL = (MSB << 8) + LSB
eeprom1::write(0,MSB)
eeprom1::write(1,LSB)
It works but on 10bit only and the accuracy is not enough.
I can not either multiply 4.9542 * 10000 and recreate the shift variable, because the variable is type of Float and I would not get as a result 4.9542 * 10000 = 40000 (if I'm not mistaken).
Please, how can I do? Do you have an example ?
Thank you in advance for your replies

User avatar
Benj
Matrix Staff
Posts: 14226
Joined: Mon Oct 16, 2006 10:48 am
Location: Matrix TS Ltd
Has thanked: 4363 times
Been thanked: 4096 times
Contact:

Re: Write float value in eeprom

Postby Benj » Thu Feb 07, 2019 5:26 pm

Hello,

You could multiply out the value first using floating point maths.

4.9542 * 10000 = 40000


This is correct. However...

4.9542 * 10000.0 = 49542.0


Which you can then copy to your integer variable.

Other ways include converting the float to a string and storing the string or splitting the float up into an array of 4 bytes using a union and then recombining directly into a float. The latter method is C only and won't simulate.

Corto
Posts: 26
Joined: Thu Sep 04, 2014 7:01 am
Has thanked: 7 times
Been thanked: 6 times
Contact:

Re: Write float value in eeprom

Postby Corto » Thu Feb 07, 2019 5:52 pm

Thank you Benj,
I will try the first solution.
As for the second that you propose, I tried in C but I was not successful, during the compilation I got a lot of errors. Do you have an example (under the elbow).
Luc
These users thanked the author Corto for the post:
Benj (Tue Feb 26, 2019 10:50 am)
Rating: 5.26%
 

ruchikadmore
Posts: 1
Joined: Tue Feb 26, 2019 6:27 am
Been thanked: 1 time
Contact:

Re: Write float value in eeprom

Postby ruchikadmore » Tue Feb 26, 2019 6:29 am

Excellent answer by Benj. Thank you.
These users thanked the author ruchikadmore for the post:
Benj (Tue Feb 26, 2019 10:50 am)
Rating: 5.26%
 
Java Developer

Samishkakumble
Posts: 1
Joined: Tue Apr 30, 2019 10:28 am
Contact:

Re: Write float value in eeprom

Postby Samishkakumble » Tue Apr 30, 2019 11:17 am

I agree with ruchikadmore..Thank you!

User avatar
Benj
Matrix Staff
Posts: 14226
Joined: Mon Oct 16, 2006 10:48 am
Location: Matrix TS Ltd
Has thanked: 4363 times
Been thanked: 4096 times
Contact:

Re: Write float value in eeprom

Postby Benj » Wed May 01, 2019 10:37 am

In Flowcode 8.1 there is a new component available under Data -> Storage called Type Conversions.

This allows you to convert between different types of variable e.g. a float can be converted into 2 unsigned ints or 4 bytes and visa versa.