Vizitator smd_smt Postat Aprilie 19, 2009 Partajează Postat Aprilie 19, 2009 Salut, lucrez la un proiect RTC pe I2C si am o nelamurire de programare. Pentru a initializa ora , data , etc folosesc un tabel cu variabile a 8 biti (deocamdata 4 pentru test ) si un pointer ce indica adresa de baza a tabloului. La apelarea functiei (in simulare)totul merge perfect doar ca dupa transmiterea ultimei variabile pointerul se mai incremneteaza o data si transmite inca o valoare.Atasez un fisier text cu acea partea de program. Link spre comentariu
Liviu M Postat Aprilie 19, 2009 Partajează Postat Aprilie 19, 2009 Eu cred ca tabloul tau ar trebui sa se termine cu 0 (sau NULL, daca o fi definit), adica sa fie unsigned char timp[5]={30,40,50,1,0};sau unsigned char timp[5]={30,40,50,1,NULL};. Da' dupa cum am mai zis altadata eu sunt un programator cam slabut, asa ca daca nu e asta imi cer scuze anticipat. Link spre comentariu
Vizitator smd_smt Postat Aprilie 20, 2009 Partajează Postat Aprilie 20, 2009 Multumesc, merge asa cum ai spus tu, cu ultima variabila a tabloului caracter nul. Link spre comentariu
bld Postat Aprilie 22, 2009 Partajează Postat Aprilie 22, 2009 Eu cred ca tabloul tau ar trebui sa se termine cu 0 (sau NULL, daca o fi definit), adica sa fie Desigur ca ai dreptate. while (*pointer_timp)inseamna ca atat timp cat continutul pointerului pointer_timp e diferit de 0, trimite pe I2C informatiile. Ori ca sa se iasa din while, trebe ca pointerul ala sa "pointeze" si spre un 0. Asa ca ultimul element din array trebe sa fie 0. In cazul asta particular, eu ca sa scap de belea (si de pointer), as fi facut asa: unsigned char timp[4]={30,40,50,1}; // tablou cu variabile (secunde=8bitii,minute=8biti ,ore=8 biti );valorile introduse //sunt pentru testunsigned char i = 0;while (i < 4) //trimite date la rtc incepand cu adresa 0x00h { // I2C_DataSend(&timp[i]); // se trimite variabila din tabelul indicat de pointer I2C_TestAck(); //testeaza daca s-a primit i++; }I2C_Stop(); Link spre comentariu
Liviu M Postat Aprilie 22, 2009 Partajează Postat Aprilie 22, 2009 Daca as fi scris eu programul, tot cu i l-as fi scris (nu's de ce nu ma impac chiar bine cu pointerii); in postul anterior am incercat doar sa raspund la intrebare.In afara de asta, ar fi interesant de "studiat" daca nu cumva varianta cu pointeri e mai "economica" din punct de vedere al resurselor consumate (desi la prima vedere par cam la fel). Link spre comentariu
bld Postat Aprilie 23, 2009 Partajează Postat Aprilie 23, 2009 Da, ar fi interesant de vazut daca una din variante e mai "economica". S-ar putea ca while (*pointer_timp) sa fie evaluat in mai multe instructiuni decat while (i < 4)...dar asta depinde strict de compilator. In rest, nu cred sa fie vreo diferenta notabila in situatia asta. In general nu ne impacam prea bine cu pointerii fiindca daca apare un bug, e mai greu de debugarit un cod cu multi pointeri decat un cod cu tablouri si variabile normale. Link spre comentariu
Vizitator smd_smt Postat Aprilie 23, 2009 Partajează Postat Aprilie 23, 2009 Am folosit pointeri deorece mi se parea mai simplu dar se pare ca m-am inselat. Acum mai am o problema, daca vreau sa transmit zero pe I2C folosind pointeri cum fac? stie cineva ? Iar cat despre "while (*pointer_timp)" compilatorul de la Hi tech "il traduce" in assembler folosind 7 instructiuni Link spre comentariu
bld Postat Aprilie 23, 2009 Partajează Postat Aprilie 23, 2009 *pointer = 0;I2C_DataSend(*pointer);Dar eu zic sa renunti la a folosi pointeri daca tot nu stapanesti bine problema. 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