Eugen_B Postat Iunie 25, 2010 Partajează Postat Iunie 25, 2010 Salut , doresc sa plasez niste pini intr-un array, pentru a apela anumite operatii pe ei direct printr-un for. Ma gandeam ca o sa fie ceva de genul: bit *pin[4];bit *tris[4];unde eu trebuie sa pun la fiecare adresa pinului , *pin[0]=@ ((unsigned)&PORTC*8)+0; (de exemplu pt RC0 ), la fel si pentru TRIS, si dupa aceste operatii urmeaza sa folosesc pin[0] in locul la RC0 . Problema este ca nu-i convine compilatorului (HITEC-C18) , si cel mai probabil nu am scris eu bine cu pointerii .Cum trebuie scris corect? Adica mie mi se pare corect ,definesc un pointer la un bit , ii dau adresa pinului , si folosesc valoarea de la adresa pointerului ca pe pin . Sigur gresesc pe undeva , poate cineva sa ma lamureasca ? Link spre comentariu
Liviu M Postat Iunie 25, 2010 Partajează Postat Iunie 25, 2010 Din cate stiu eu, compilatoarele de la hitech nu accepta pointeri catre bit. Citat din manualul picc - compilatorul pentru midrange de la hitech: It is, however, not possible to declared pointers to bit variables or statically initialise bit variables.Cauta si tu in manualul de la C18 si vezi ce zic. Link spre comentariu
izua Postat Iunie 25, 2010 Partajează Postat Iunie 25, 2010 Nu ai cum. Standardul C-99 tocmai de-aia sugerează măștile pe biți. Poți să faci câteva definiri de precompilator, dar tot nu le poți itera programatic. Dacă vrei să iterezi bit cu bit, încearcă mascare cu deplasare uint8_t registru = 0x00;for (uint8_t k = 0; k < 7; k++) if ((k % 2) == 0) registru |= (1 << k); Astfel, pe biții 0, 2, 4, 6 (adică ăia care dau rest 0 la împărțirea la 2- operatorul % -) vor fi setați, pe când ceilalți vor rămâne pe 0. registru va avea valoarea 0101 0101 la final. Vezi că la PIC apar probleme de genul read-modify-write (unul din motive pentru care eu nu suport arhitectura PIC). E recomandat să faci toate operațiile în memorie, într-un registru numit de obicei shadow, după care să scrii acest registru în PORT. 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