Sari la conținut
ELFORUM - Forumul electronistilor

problema pointer spre un tablou


Vizitator smd_smt

Postări Recomandate

Vizitator smd_smt

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
  • Răspunsuri 7
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • bld

    3

  • Liviu M

    2

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. :jytuiyu

Link spre comentariu

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

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

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

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

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