TEENSY 4.0 EEPROM & RAM Questions

Actually you don't even need the surrounding struct you can directly put/get your array:
Code:
[size=3][color=#000000][/color][color=#000099]#include <EEPROM.h>[/color]
[color=#000000][/color]
[color=#000000][/color][color=#0000ff]float[/color] [color=#000000]focusCalib[/color][color=#000000][[/color][color=#000000][/color][color=#a52a2a]12[/color][color=#000000][/color][color=#000000]][[/color][color=#000000][/color][color=#a52a2a]4[/color][color=#000000][/color][color=#000000]];[/color]
[color=#000000][/color]
[color=#000000][/color][color=#0000ff]void[/color] [color=#000000][/color][color=#000000][b]setup[/b][/color][color=#000000][/color][color=#000000]()[/color]
[color=#000000][/color][color=#000000]{[/color]
[color=#000000]    EEPROM[/color][color=#000000].[/color][color=#000000][/color][color=#000000][b]put[/b][/color][color=#000000][/color][color=#000000]([/color][color=#000000][/color][color=#a52a2a]0[/color][color=#000000][/color][color=#000000],[/color] [color=#000000]focusCalib[/color][color=#000000]);[/color]
[color=#000000]    EEPROM[/color][color=#000000].[/color][color=#000000][/color][color=#000000][b]get[/b][/color][color=#000000][/color][color=#000000]([/color][color=#000000][/color][color=#a52a2a]0[/color][color=#000000][/color][color=#000000],[/color] [color=#000000]focusCalib[/color][color=#000000]);[/color]
[color=#000000][/color][color=#000000]}[/color]
[color=#000000][/color]
[color=#000000][/color][color=#0000ff]void[/color] [color=#000000][/color][color=#000000][b]loop[/b][/color][color=#000000][/color][color=#000000]()[/color]
[color=#000000][/color][color=#000000]{[/color]
[color=#000000][/color][color=#000000]}[/color][color=#000000][/color]
[/size]

The Teensy version of the EEProm library accepts all "trivially copyable" data types, e.g. primitive types (ints, floats..) structs, arrays and much more. (You'll get a compile time error if the EEProm lib can not handle your data type directly)
 
I did not yet fully test, but after first fast test it seems to work as intended, the floats are correctly stored.

this stores the 4 bytes per float
Code:
byte* data_FW = (byte*)&FocusCalib[i][j];
                        for (int k = 0; k < sizeof(float); k++) {
                          EEPROM.write(addr_, data_FW[k]);
 
that looks handy

Actually you don't even need the surrounding struct you can directly put/get your array:
Code:
[size=3][color=#000000][/color][color=#000099]#include <EEPROM.h>[/color]
[color=#000000][/color]
[color=#000000][/color][color=#0000ff]float[/color] [color=#000000]focusCalib[/color][color=#000000][[/color][color=#000000][/color][color=#a52a2a]12[/color][color=#000000][/color][color=#000000]][[/color][color=#000000][/color][color=#a52a2a]4[/color][color=#000000][/color][color=#000000]];[/color]
[color=#000000][/color]
[color=#000000][/color][color=#0000ff]void[/color] [color=#000000][/color][color=#000000][b]setup[/b][/color][color=#000000][/color][color=#000000]()[/color]
[color=#000000][/color][color=#000000]{[/color]
[color=#000000]    EEPROM[/color][color=#000000].[/color][color=#000000][/color][color=#000000][b]put[/b][/color][color=#000000][/color][color=#000000]([/color][color=#000000][/color][color=#a52a2a]0[/color][color=#000000][/color][color=#000000],[/color] [color=#000000]focusCalib[/color][color=#000000]);[/color]
[color=#000000]    EEPROM[/color][color=#000000].[/color][color=#000000][/color][color=#000000][b]get[/b][/color][color=#000000][/color][color=#000000]([/color][color=#000000][/color][color=#a52a2a]0[/color][color=#000000][/color][color=#000000],[/color] [color=#000000]focusCalib[/color][color=#000000]);[/color]
[color=#000000][/color][color=#000000]}[/color]
[color=#000000][/color]
[color=#000000][/color][color=#0000ff]void[/color] [color=#000000][/color][color=#000000][b]loop[/b][/color][color=#000000][/color][color=#000000]()[/color]
[color=#000000][/color][color=#000000]{[/color]
[color=#000000][/color][color=#000000]}[/color][color=#000000][/color]
[/size]

The Teensy version of the EEProm library accepts all "trivially copyable" data types, e.g. primitive types (ints, floats..) structs, arrays and much more. (You'll get a compile time error if the EEProm lib can not handle your data type directly)
 
Code:
                     EEPROM.write(addr, *((uint8_t*)&FocusCalib[i][j]));
                     addr += 4;
EEPROM.write ONLY writes a byte, so why are you advancing the addr by 4?
It used to, but the interface was re-written some time ago (at least in Teensy land, but perhaps in the general Arduino library) to use a template. This means if you do a put or get of a structure or a base type like a float, etc. it will write or read the entire structure/type. Of course if you are writing multiple bytes in a type, you have to bump the address by that size.
 
EEPROM READ and WRITE are uint8_t BYTE only:
Code:
  uint8_t [B]read[/B]( int idx )              { return EERef( idx ); }
    void [B]write[/B]( int idx, uint8_t val )   { (EERef( idx )) = val; }

Get and put are the alternate interface for multibyte template derived Read and Write:
Code:
    template< typename T > T &[B]get[/B]( int idx, T &t ){
// and
    template< typename T > const T &[B]put[/B]( int idx, const T &t ){
 
Back
Top