Sari la conținut
ELFORUM - Forumul electronistilor

MPLAB C30


Vizitator _zc

Postări Recomandate

Vizitator _zc

am un proiect cu mai multe mai multe fisiere sursa. cum trebuie sa declar o variabila intr-un fisier ca sa fie vazuta si in celelalte fisiere?in afara de varianta asta:fisier1int x;fisier2extern int x;

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

Top autori în acest subiect

  • bogdanm

    3

  • Abram Burel

    2

  • Cristiano

    1

  • CristianC

    1

Top autori în acest subiect

aceeasi varianta o folosesc si eu, si nu am avut probleme pana acum1. Trebuie sa ai grija ca variabila x sa fie declarata globala (nu in interiorul unei functii)2. Ambele fisiere trebuie incluse in proiect3. Fisierul pt linker (cu extensia .gld) trebuie inclus in proiect

Link spre comentariu
Vizitator _zc

merge, merge nu-i problema.dar ma gindeam daca se poate si altfel sa nu o mai declar extern.. in fiecare fisier unde o folosesc. de exemplu am o structura de biti unde tin semnalizari de la seriala,i2c....trebuie sa declar extern.. structura asta in fiecare fisier unde folosesc unul din biti. daca mai adaug un bit sau modific ceva la ea trebuie sa am grija sa modific peste tot.

Link spre comentariu

merge, merge nu-i problema.dar ma gindeam daca se poate si altfel sa nu o mai declar extern.. in fiecare fisier unde o folosesc. de exemplu am o structura de biti unde tin semnalizari de la seriala,i2c....trebuie sa declar extern.. structura asta in fiecare fisier unde folosesc unul din biti. daca mai adaug un bit sau modific ceva la ea trebuie sa am grija sa modific peste tot.

typedef struct {.....} mystruct -> asta intr-un header;mystruct x; -> in fisierul in care o definestiextern mystruct x; -> in toate celelalte fisiere unde o folosesti, incluzand mai intai header-ul.
Link spre comentariu

Eu zic ca o solutie este ca "modulele" sa nu fie... aware de structura de bit la nivelul declaratiei. Adica le vei declara byte sau word sau ce o fi, dar le "apelezi" dupa structura comuna, fiecare modul fiind "constient" de partea care-i revine. Un pic de ajutor ar fi sa structurezi/grupezi bitii dupa utilizare.Pe de alta parte, parca si tipurile pot fi declarate global. Caz in care structura unei variabile particulare va fi cunoscuta in orice modul. Am zis "parca", nu dati cu parul.

Link spre comentariu
Vizitator _zc

da bogdanm, asa se mai simplifica.abram_burel nu pricep ce vrei sa zici. am grupat toti bitii aia din obisnuinta, sa nu consum ram inutil, cu toate ca la dspic nu mai conteaza citiva octeti consumati in plus

Link spre comentariu

Pai cam exact ce zicea bogdan, dar consideratiile erau valabile pentru un limbaj oarecare si exprimate e drept cam.. intortocheat.Ar mai fi o varianta, folosita in asm: sa lasi cuvantul ala de stare nestructurat (adica sa nu definesti structura asa cum a propus bogdan) si sa folosesti masti pentru testarea/modificarea bitilor, acolo unde ai nevoie. Oricum, nu prea ar avea rost, s-ar pierde din facilitatile unui limbaj de nivel mai inalt (desi codul ar putea sa iasa mai compact).

Link spre comentariu

Poti impaca (oarecum) si capra si varza folosind niste uniuni:

 

struct sixteen_bits{	unsigned char bit0	:1;	unsigned char bit1	:1;	unsigned char bit2	:1;	unsigned char bit3	:1;	unsigned char bit4	:1;	unsigned char bit5	:1;	unsigned char bit6	:1;	unsigned char bit7	:1;	unsigned char bit8	:1;	unsigned char bit9	:1;	unsigned char bit10	:1;	unsigned char bit11	:1;	unsigned char bit12	:1;	unsigned char bit13	:1;	unsigned char bit14	:1;	unsigned char bit15	:1;};struct eight_bits{	unsigned char bit0	:1;	unsigned char bit1	:1;	unsigned char bit2	:1;	unsigned char bit3	:1;	unsigned char bit4	:1;	unsigned char bit5	:1;	unsigned char bit6	:1;	unsigned char bit7	:1;};struct two_bytes{	unsigned char low;	unsigned char high;};union wordtype{	unsigned int word;	struct two_bytes byte;	struct sixteen_bits part;};union chartype{	unsigned char byte;	struct eight_bits part;};// eventual cu un typedef, sa fie mai usor la declaratii dupa aceeawordtype a;// acces pe cuvant de 16 biti:a.word=0xFFFF;// acces pe octet:a.byte.low &= MASK;a.byte.high = 0xAB;// acces pe biti:a.part.bit5 = 1;// in toate cazurile continutul accesat este acelasi, doar modul de acces difera.

In felul asta poti accesa aceiasi biti fie individual, fie direct ca octet sau cuvant pe 16 biti.

 

In rest, dupa cum zicea si bogdanm, definitiile structurilor/uniunilor intr-un header care este inclus de toate fisierele/modulele ce vor utiliza respectivele structuri/uniuni (in acest mod trebuie sa modifici doar intr-un singur loc definitia), iar declaratiile - intr-un modul in mod normal, in restul cu extern (desigur, in caz ca se doreste accesarea aceluiasi obiect din diverse module).

Link spre comentariu
  • 2 săptămâni mai târziu...
Vizitator _zc

cum definesti/scrii/citesti structuri in eepromul intern? daca se poate.si inca ceva: eepromul intern nu reusesc sa-l scriu decit daca il sterg inainte. scrie undeva treaba asta.

Link spre comentariu

cum definesti/scrii/citesti structuri in eepromul intern? daca se poate.si inca ceva: eepromul intern nu reusesc sa-l scriu decit daca il sterg inainte. scrie undeva treaba asta.

In GCC nu merge direct. Adica merge doar sa-i specifici faptul ca structura se afla fizic in EEPROM, dar tot va trebui sa folosesti eeprom_read/eeprom_write ca sa ai acces la membrii ei. Tinand cont de faptul ca aici apar probleme de alignment, e mai bine s-o lasi balta daca nu stii foarte clar ce faci. E posibil ca alte compilatoare sa suporte asta. Stiu sigur ca IAR te lasa sa spui "__eeprom int x" (de exemplu) si apoi poti accesa x direct, fara sa fie nevoie sa folosesti functii de acces.Orice memorie flash/EEPROM trebuie stearsa inainte de a fi scrisa. Asta pentru ca singura operatie prin care poti "scrie" un 1 intr-o astfel de memorie e stergerea. Daca un 1 din asta devine 0 printr-o operatie normala de scriere, nu mai poate fi facut 1 din nou decat prin stergere. Nu scrie in manual pentru ca se presupune ca lumea stie chestia asta :)
Link spre comentariu
Vizitator _zc

bogdanm vad ca ai raspuns. dar e o problema ca eu nu vad decit pina la post-ul meu din 12 mai.daca ai raspuns inseamna ca tu vezi tot topicul

Link spre comentariu
Vizitator _zc

gata acum vad tot.deci nu merge faza cu structuri in eeprom. asta e. din eeproamele cu care am lucrat asta e singurul care are stergerea explicita.

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