ywar2 Postat Noiembrie 10, 2010 Partajează Postat Noiembrie 10, 2010 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
cirip Postat Noiembrie 10, 2010 Partajează Postat Noiembrie 10, 2010 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
ole Postat Noiembrie 11, 2010 Partajează Postat Noiembrie 11, 2010 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
mitescu Postat Noiembrie 11, 2010 Partajează Postat Noiembrie 11, 2010 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
ole Postat Noiembrie 11, 2010 Partajează Postat Noiembrie 11, 2010 Eu la lucrul cu bytes din EEPROM m-am referit dar dupa mintea mea oricum are nevoie si de un flag ca altfel nu stie sigur daca ceea ce citeste este ce trebuie sau nu. Poate gresesc... Link spre comentariu
Vizitator sethab Postat Noiembrie 11, 2010 Partajează Postat Noiembrie 11, 2010 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
ywar2 Postat Noiembrie 11, 2010 Autor Partajează Postat Noiembrie 11, 2010 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 IfProblema 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
ywar2 Postat Decembrie 4, 2010 Autor Partajează Postat Decembrie 4, 2010 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 IfIata 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 lucruDupa 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum