Arduino a preload eeprom

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: Arduino a preload eeprom

Příspěvek od Dex »

Českou verzi rádi uveřejníme i na RoboDoupěti ;)
"all your robots are belong to us"
robodoupe.cz
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Arduino a preload eeprom

Příspěvek od fulda »

Dex píše:Českou verzi rádi uveřejníme i na RoboDoupěti ;)
Toš uveřejněte - pokud zachováte jméno autora a referenční odkaz na mou stránku tak v pohodě.

Hlavně by mne potěšilo, kdyby si každej udělal alespoň jeden pokus na nějakém arduinu, aby to náhodou nemělo nějaké skryté vady.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: Arduino a preload eeprom

Příspěvek od Dex »

Tak odkazy na autorství pochopitelně zachováme - to je samozřejmé! ;)

Už je někde finální verze?
"all your robots are belong to us"
robodoupe.cz
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Arduino a preload eeprom

Příspěvek od fulda »

Nejfinálnější verze je TADY.
Českou verzi už nemám v plánu měnit. Čenglickou jen pokud mi jí někdo zreviduje.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Arduino a preload eeprom

Příspěvek od fulda »

Tak jsem dnes trochu něco programoval a při té příležitosti jsem používal i EEMEM. A ejhle, narazil jsem na dost velkej problém. překladač sice hezky vytvoří *.eep, ale sám se nějak ztratí ve velikostech a do těch odkazových proměnných nandá blbosti. Tedy on správně přiřadí tu první (na adresu 0), ale ty ostatní dostanou nějaké ohromné adresy, jako kdyby int byl třeba 20kB.
... a navíc mi přestal generovat map file :(

Ukázka jak to nefunguje:

Kód: Vybrat vše

#include <EEPROM.h>

unsigned int EEMEM ee_j = 123;
unsigned int EEMEM ee_i = 1122;

void setup(){
  
  unsigned int ram_i;   //Variable to store data read from EEPROM.
  unsigned int ram_j;   //Variable to store data read from EEPROM.
  
  Serial.begin( 9600 );
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print( "Read u-int from EEPROM: " );

  EEPROM.get( ee_i, ram_i );
  Serial.println( ram_i ); 
  Serial.println( "ee_i" ); 
  Serial.println( ee_i ); 

  EEPROM.get( ee_j, ram_j );
  Serial.println( ram_j ); 
  Serial.println( "ee_j" ); 
  Serial.println( ee_j ); 
}

void loop(){ /* Empty loop */ }
Vygeneruje následující výstup:

Kód: Vybrat vše

Read u-int from EEPROM: 1122
ee_i
0
65535
ee_j
20735
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Arduino a preload eeprom

Příspěvek od fulda »

Bezva, tak ještě jednou a lépe, on to ten překladač myslí dobře, ale člověk si to musí správně vyložit. Takže ta proměnná ee_i je správně typu unsigned int, to je logické o to jsem překladač přece požádal, ale její "reference" není do ram, ale do eeprom, takže abych mohl použít knihovnu EEPROM, která očekává že dostane hodnotu a nikoli referenci, pak si musím malinko pohrát s přetypováním: int(&ee_i)

Takže fungující kód je:

Kód: Vybrat vše

#include <EEPROM.h>

unsigned int EEMEM ee_j = 15;
unsigned int EEMEM ee_i = 112;

void setup(){
  
  unsigned int ram_i;   //Variable to store data read from EEPROM.
  unsigned int ram_j;   //Variable to store data read from EEPROM.
  
  Serial.begin( 9600 );
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print( "Read u-int from EEPROM: " );

  EEPROM.get( int(&ee_i), ram_i );
  Serial.println( ram_i ); 
  Serial.println( "ee_i" ); 
  Serial.println( int(&ee_i) ); 

  EEPROM.get( int(&ee_j), ram_j );
  Serial.println( ram_j ); 
  Serial.println( "ee_j" ); 
  Serial.println( int(&ee_j) ); 
}

void loop(){ /* Empty loop */ }
Dostaneme správně:

Kód: Vybrat vše

Read u-int from EEPROM: 112
ee_i
0
15
ee_j
2
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Odpovědět