Arduino a preload eeprom
Re: Arduino a preload eeprom
Českou verzi rádi uveřejníme i na RoboDoupěti
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Arduino a preload eeprom
Toš uveřejněte - pokud zachováte jméno autora a referenční odkaz na mou stránku tak v pohodě.Dex píše:Českou verzi rádi uveřejníme i na RoboDoupěti
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.
Re: Arduino a preload eeprom
Tak odkazy na autorství pochopitelně zachováme - to je samozřejmé!
Už je někde finální verze?
Už je někde finální verze?
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Arduino a preload eeprom
Nejfinálnější verze je TADY.
Českou verzi už nemám v plánu měnit. Čenglickou jen pokud mi jí někdo zreviduje.
Č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.
Re: Arduino a preload eeprom
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:
Vygeneruje následující výstup:
... 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 */ }
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.
Re: Arduino a preload eeprom
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á
Takže fungující kód je:
Dostaneme správně:
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 */ }
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.