Soros parancs értelmező program készítés!

Tanfolyamok, oktatások és kapcsolódó házi feladatok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 6. szombat, 19:48

A fenti (költői kérdés) megoldására született a rutin:

Kód: Egész kijelölése

/***
    Advance to the next address, when at the end restart at the beginning.

    Larger AVR processors have larger EEPROM sizes, E.g:
    - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno:        1kb EEPROM storage.
    - Arduino Mega:       4kb EEPROM storage.

    Rather than hard-coding the length, you should use the pre-provided length function.
    This will make your code portable to all AVR processors.
      
    As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
    EEPROM address is also doable by a bitwise and of the length - 1.

    ++address &= EEPROM.length() - 1;      
  ***/
boolean EEPoverflow(void){   
  unsigned int address = addr + bytes;
   boolean error = true;
  if (address >= EEPROM.length()) {
      Serial.print(address);
      Serial.print("! EEPROM cimzes ERROR! Max Cim:  ");   //   jelzi a hibát
      Serial.println(EEPROM.length());
      
    error = false;
  }
   return error;
}   


A cím, és méret paraméterek beolvasása után hívjuk meg.
És hiba esetén? Szintén megszakad a feldolgozás!

Forráskod, majd tesztelés után! :!:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: Robert » 2017. május 7. vasárnap, 10:29

Még 1 hülye kérdés:
-mi van ha az EEPROM tartalom sérült és/vagy a beírás nem jól történt meg?

Visszaolvasást tennék be, hogy sikeres volt-e az írás.
Az EEPROM írás jelzőbitjei nem tartalmaznak hibakódot?

Kreatív felhasználó tömeges írás (mondjuk 10 adatot írna be az eprom vége előtti 5. cellától.....)
Ekkor mi történik? Félig írja az adatot az EEPROMba?
http://www.tavir.hu - a gazda :)

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 7. vasárnap, 12:00

kapu48 Jol elbeszélgetsz.........Magadal?

Avatar
csabeszq
Bitfaragó
Hozzászólások: 659
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: csabeszq » 2017. május 7. vasárnap, 12:15

Én CRC-zek EPROM-nál. Ha nem stimmel, feltöltök mindent alapértékekkel.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: Robert » 2017. május 7. vasárnap, 12:33

Azért nem teljesen... Hangosan gondolkodás esete...
Nálam is előfordul:
1, Van egy ötlet és arra 1-2-3 megoldás érvekkel...
2, Eszembejut a megvalósítás és leírom... ha más később ide téved, akkor lássa az előzményeket és a gondolatsort.

Nagyon sok fórumban ez lenne a követendő - amolyan brainstorming (önállóan vagy csapatban). Miért jó? Pl. 3-4 évmúlva megjelenik új ötlet/eljárás/program, amivel az eredeti probléma lekezelhető. Akkor is be lehessen írni és ne egy végtelen hozzászólástörténet legyen. (Ezért darabolom pl. időnként a hozzászólások témaszálait is...)
Most azzal mit érnénk:
- kérdés adott... Eltelik 1-2 hét, néha válaszok. Majd a végén: "Megoldottam...."

Így sem a megoldás, sem az oda vezető út nem kerülne a fórumba. Jó az az utókornak? :(
http://www.tavir.hu - a gazda :)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 7. vasárnap, 16:20

A téma címe: Készítsünk programot! (Nem pedig, hogy: Itt van egy program nektek!)

A kezdőkre gondoltam, bemutatni a program fejlesztés menetét.
Feladatról, feladatra lépve. Közben több elképzelést is kipróbálni, megkeresni a legjobbat!

Pl. rögtön van egy tábor aki, CRC-t számol az eredeti adatból, vissza olvassa az EEPROM-ot abból is CRC végösszeget számol. És a folyamat végén dönti el, hogy egyforma 2 CRC? Jól sikerülte az írás művelet? Ha nem? Kezdi elölröl!
Én viszont: vissza olvasok le ellenőrzöm a kapott adatot. Ha hibás megpróbálom javítani! Ha nem sikerült? Hibajelzéssel kiugrok a programból! Mivel hibás EEPROM-al fölösleges tovább kínlódni!

EEPROM vége ellenőrzés?
Azzal kezdjük, hogy a ’cím’ kulcsszó után megadjuk a cél kezdő címét.
Utánna megadjuk, hogy írni akarunk a ’write’ kulcsszóval, utánna jön a felírandó Bytek száma.
Ha ezt a két értéket összeadjuk, megkapjuk az utolsó címet. Ha ez túl nyúlik az adott EEPROM területen? Figyelmeztetünk rá, és már el sem kezdjük az írást!

Ezek után még van az: ’adat’ kulcsszó, amivel jelezzük, hogy Byte-ként kel értelmezni a beirt stringeket.
Illetve van az: ’str’ kulcsszó, ami jelzi, hogy egybefüggő szövegként kel értelmezni az adatot.
A következő megvalósítani szánt kulcsszavak: ’hexa’ ami a hexa formában beirt adatok (0xff vagy 0XFF). Értelmezését fogja elősegíteni.
Még tovább bonyolítva: ’array’ kucsszó. Ami már a C stílusú tömb beolvasására lenne képes. Ezt a tömböt EEPROM-ba rakni pl.:
// Standard ASCII 5x7 font
// FONT5X7
// 5 * (261 - 6) 5*255 = 1275 Byte
static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
0x18, 0x3C, 0x7E, 0x3C, 0x18,
0x1C, 0x57, 0x7D, 0x57, 0x1C,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C,

0x00, 0x3C, 0x3C, 0x3C, 0x3C,
0x00, 0x00, 0x00, 0x00, 0x00
};

Ki, hogyan csinálná? :?:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: Robert » 2017. május 7. vasárnap, 17:34

A tömb egyszerűen végigírod. Viszont kérdés, hogy az adatmegadás hogyan megy...

De egyéb ötlet:
Beírandó adat:
12, -44, +254, 100LONG, 0xFF, 0xCD, Binary:11110111110, 0x11110111110, DEC:11110111110, "11110111110"
Ez hogyan megy? :D

Illetve mi van ha autoincrement-tel akarok beírni?
Írj a 31. címtől, unsigned_integer-t: 12, 65534, 32767, 0, 14, 3x írj 254-et :), 12, 22,1,1,1,1,1,1,1,1,1,,1,1,1,1 #VÉGE
http://www.tavir.hu - a gazda :)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 7. vasárnap, 18:52

Már leírtam!

Még csak Byte-t tudunk írni! A megadott kezdőcímtől, megadott darabszámút.
Automatikus cím növeléssel!

Ezt értelmezheted Számként 0 – 255. Vagy folyamatos Szövegként.

És Amit be állítottál elválastó nak, azt használd! Nem kavarhatod az elválasztó tokeneket!
(Illetve a token paranccsal adhatsz meg másik max 4 karakteres szeparáló stringet. Amit az után alkalmaznod kel.)


Ha az user elgépeli? Azzal nem tudok mit kezdeni! Gondolatolvasó program ötlete, nekem is jól jönne!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 7. vasárnap, 19:09

Viszont a 2 Bytes, uint16 kezelése már tervbe van véve.

Csak még nem érzem, hogy lesz a téma iránt érdeklődő közönség?

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 7. vasárnap, 19:20

„ 3x írj 254-et”
3 Byte törlésnek megadod a 254 értéket
Megoldás:
cím 123 clear 3 254

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 8. hétfő, 15:28

Az utóbbi 2 rutint leteszteltem!

Illetve csak az EPPROM terület túlcímzést sikerült. Mert hibás EPPROM-os arduinom nincsen még, azt nem tudtam szimulálni! (De szerintem a hiba ellenőrzésnek működnie kel.)

Ide töltöm a forráskódot (Bátran lehet ismerkedni vele!):
EEPROMtest05.ino
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 8. hétfő, 18:15


Avatar
Robert
Elektronbűvölő
Hozzászólások: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: Robert » 2017. május 8. hétfő, 18:44

Ez a linkelt lib - az AVRre igaz.
Hülye kérdés - ha univerzális a program:
- ARM alap esetén is működik? (Nincs alapban eprom)
- ESP8266 esetén? (Saját magam mondom meg mekkora területet tekintsen eepromnak a flashból)


A mintaprogram fejléce nem pontos:

Kód: Egész kijelölése

6. Elválaszto token megváltoztatása:
kulcs szo: token
Paraméter: a token hossza chr, az uj token mostantol: ', '
token 2 ,
Ezek után igy nézki a bevitel példa:
1b. A példában 100 cimtöl, 5 char-t irunk
cim,100,write,5,adat,10,20,30,40,50,  <- nem kell a szóköz közé! Végén vesszővel zárom? Vagy elég az ENTER?
Vissza olvasás:
cim,100,read,5,adat <- nem kell a szóköz közé! Végén vesszővel zárom? Vagy elég az ENTER?
http://www.tavir.hu - a gazda :)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 8. hétfő, 18:50

Sajnos (még) nem!

Mert legtöbbet ezt a 2 funkcuót használlom:

    Library functions

    EEPROM.read( address ) [example]

    This function allows you to read a single byte of data from the eeprom. Its only parameter is an int which should be set to the address you wish to read.

    The function returns an unsigned char containing the value read.

    EEPROM.write( address, value ) [example]

    The write() method allows you to write a single byte of data to the EEPROM. Two parameters are needed. The first is an int containing the address that is to be written, and the second is a the data to be written (unsigned char).

Ezeknek az ARM megfelelőjét, még meg kellene írni!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 8. hétfő, 19:07

Robert kérdezte:
"cim,100,read,5,adat <- nem kell a szóköz közé! Végén vesszővel zárom? Vagy elég az ENTER?"

Induláskor az alapértelmezett elválasztó a szóköz!

Definiálhatsz egyéni elválasztó tokeneket! És te határozod meg, hogy legyen szóköz vagy nem!
Lehet szóközzel: token 2 , ' vagy nélküle: token 1 ,' (A ' jelet csak szemléltetésnek raktam)

Végére Nem kell a szóköz! De nem is okoz működésben hibát.

Viszont meg adhatod folyamatosan írás + vissza ellenőrzés:
cim, 100, write, 5, adat, 10, 20, 30, 40, 50, cim, 100, read, 5, adat’

(Igaz már automatikusan ellenöriz írás közben, ez már felesleges. Csak jó ha van.)


Vissza: “Oktatás”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég