Când vorbesc cu programatori C despre interfețe hardware sau a unui standard de programare, de multe ori văd că nu au competențele și informațiile necesare cu privire la acest limbaj de programare. De obicei, este pentru că noi toți inginerii, practic, electronice, care au studiat C (sau orice altă limbă) în monoterapie.
Una dintre aceste competențe se referă la crearea de fișiere antet. Ce trebuie să (sau nu ar trebui) să fie plasate într-un fișier header .h C? Când trebuie să creați fișierul antet? Și de ce?
La aceste întrebări, am o listă de răspunsuri.
Creați un fișier header .h pentru fiecare sistem de „modul“. Modulul poate cuprinde unul sau mai multe fișiere compilate (de ex. Cu sau .asm), dar ar trebui să realizeze doar un aspect al sistemului. Exemple de module bine selectate sunt: ADC conducător auto; protocol de comunicare, cum ar fi FTP; manager de accidente care conduce jurnalul de erori, și avertizează utilizatorul de livrare.
Include antet .h fișier toate prototipurile de funcții care alcătuiesc modulul de interfață externă. De exemplu, fișierul antet ar putea conține adc.h funcții de prototipuri adc_init (), adc_select_input (), adc_read ().
Nu includeți un fișier antet funcții și macro-uri care sunt destinate utilizării în cadrul modulului. Este recomandabil să se ascundă aceste „ajutoare“ pe piața internă, în cazul în care nu sunt utilizate în alte module. (În cazul în care modulul este compilat din mai multe fișiere care utilizează funcțiile interne, apoi a crea un fișier antet separat pentru acest scop.) Un modul ar trebui să declanșeze modulul B numai prin intermediul interfeței deschise definite în fișierul antet moduleb.h
Nu așezați în variabilele de fișier antet, așa cum este de prea multe ori face folosind cuvinte cheie extern. Corectați modulul de încapsulare necesită ascunderea tuturor datelor interne în fișierele sursă C. Dacă este posibil, variabilele interne trebuie să fie declarate cu cuvântul cheie static, pentru a limita domeniul de aplicare a acestora în afara modulului.
Nu sunt prezentate structuri de date specifice formatul intern utilizate de funcțiile de modul de interfață. Cu alte cuvinte, în fișierul antet ar trebui să fie nici o structfoo. Dacă aveți tipul de date care urmează să fie transmise către sau de la modulul, definesc tipurile de date în fișierul antet de typedef. De exemplu, deoarece "typedef struct foo moduleb_type". Modulele client nu trebuie să cunoască structura internă a formatului.
În timp ce aceste sfaturi nu sunt specifice software-ului încorporat. Sper că vor fi utile pentru tine.