Sari la conținut
ELFORUM - Forumul electronistilor

ERAM Byte


ywar2

Postări Recomandate

Salut. Sint incepator in domeniul microcontrolerelor si ca orice incepator am si probleme.

Lucrez la un proiect personal pe care l-am dus la bun sfirsit cu rezultatele propuse. In proiect folosesc o variabila de tip ERAM Byte pe care o citesc si o rescriu doar cind am nevoie. Functioneaza foarte bine atat scrierea cit si citirea, iar valorile modificate pe parcurs se pastreaza cu succes si dupa deconectarea alimentarii. Problema este urmatoarea: cum pot sa dau o valoare implicita acestei variabile care sa fie vazuta numai la prima punere in functiune a programului dupa ce a fost scris in microcontroler? Daca nu ii dau o valoare implicita aceasta va avea valoarea 255, iar eu nu doresc asta. Poate parea simpla problema mea, dar atunci cind nu conosti devine foarte complicata.

Merci anticipat !!!

Link spre comentariu
  • Răspunsuri 7
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • ywar2

    3

  • ole

    2

  • cirip

    1

  • mitescu

    1

Top autori în acest subiect

cum pot sa dau o valoare implicita acestei variabile care sa fie vazuta numai la prima punere in functiune a programului dupa ce a fost scris in microcontroler? Daca nu ii dau o valoare implicita aceasta va avea valoarea 255, iar eu nu doresc asta.

De exemplu, la pornire citesti variabila. Daca e 255, atunci nu a fost inca scrisa/initializata si o initializezi. Daca e orice altceva decat 255, inseamna ca ai trecut deja pe acolo si o lasi in pace. Ai grija ca in functionare normala valoarea 255 sa nu fie alocata/scrisa, a.i. 255 sa insemne intotdeauna locatia neinitializata.
Link spre comentariu

Sau daca ai nevoie si de 255 mai folosesti un byte pe post de flag: daca nu ai scris inca locatia care te intereseaza flag-ul are valoare 255 sau orice alta valoare, asta contand mai putin. in momentul in care ai scris ceva in byte-ul care te intereseaza modifici si valoarea flag-ului la o valoare pe care sa o cunosti si cu care sa poti verifica ceva de genul:

 

if(flag==x) {citesc byte}else {byte-ul nu a fost inca scris si faci ce trebuie ca sa-l initializezi cum doresti}
Link spre comentariu

Plaseaza un back-up a variabilei in eeprom, iar la reset initializezi variabila din eeprom. In acest caz, la fiecare modificare a variabilei, trebuie sa ai grija sa salvezi si back-up-ul in eeprom

Link spre comentariu
Vizitator sethab

iti spun cum fac eu ( aproximativ ca in postul lui ole): folosesc 2 bytes in eeprom: unul pt valoare, altul pe post de flag. Cel pe post de flag il scriu ca 0XAB, cand salvez variabila principala. La reset daca variabila flag este 0xAB, atunci citesc si variabila principala din memorie; daca var. flag nu e 0xAB, atunci var. principala e initializata cu valoare default.

Link spre comentariu

Salut si multumesc tuturor ptr raspunsuri. Ati anticipat solutia pe care eu deja o am in program:

Dim Mod_memorat As Eram Byte                                'ultimul mod de afisare salvat in ERAMDim Mod_afisat As Byte                                      'modul de afisare.....         Mod_afisat = Mod_memorat                           'incarc modul de afisare LCD din ERAM         If Mod_afisat > 3 Then                             '<<<< valabil numai dupa rescriere (Mod_memorat=255) la prima ponire                        Mod_afisat = 0                      'aici se face initializarea                        Mod_memorat = Mod_afisat            'si se salveaza inapoi in ERAM         End If
Problema este rezolvata dar... Nu se putea oare altfel? Cind compilez deja sa am o valoare data, valoare vazuta doar la prima punere in functiune, caci dupa aceea ea sa fie modificata.

Nu se poate denumii o locatie de memorie din ERAM cu numele variabilei si cu continutul acesteia cu directivele compilatorului, variabila care ulterior sa poata fi vazuta si folosita de program?

Sansa mea esta ca am o singura variabila de genul asta, altfel trebuia sa multipic liniile de mai sus de nx ptr probabil o comanda destul de simpla.

Pe curind!!!

Link spre comentariu
  • 4 săptămâni mai târziu...

Salut. Baieti am gasit solutia.

Iata codul vechi:

Dim Mod_memorat As Eram Byte                                'ultimul mod de afisare salvat in ERAMDim Mod_afisat As Byte                                      'modul de afisare.....         Mod_afisat = Mod_memorat                           'incarc modul de afisare LCD din ERAM         If Mod_afisat > 3 Then                             '<<<< valabil numai dupa rescriere (Mod_memorat=255) la prima ponire                        Mod_afisat = 0                      'aici se face initializarea                        Mod_memorat = Mod_afisat            'si se salveaza inapoi in ERAM         End If
Iata codul nou:

Dim Mod_afisat As Byte                      'modul de afisare: 0, 1, 2 sau 3......'aici era solutia$EepromLCD_mode:Data 2                                      'am ales ca modul de afisare initial la prima pornire sa fie 2$Data......'initializare mod de afisareReadeeprom Mod_afisat, LCD_mode             'citesc ce mod de afisare este salvat in memorie......'modificarea si salvarea modului de afisareLCD_mode=1                                  'modific modul de afisareWriteeeprom Mod_afisat, LCD_mode            'salvez in memorie noul mod de lucru
Dupa compilare sint create doua fisiere, unul contine programul (.bin) si celalalt continutul EEprom-ului (.eep). Acestea sint incarcate impreuna si scrise in controler.

Stiam eu ca este simplu !!!

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări