Programarea microcontrollerelor

De la Wikipedia, enciclopedia liberă

Microcontrollerul este un circuit integrat ce conține un procesor, memorie program, memorie de date și periferice. Un microcontroller execută un program din memoria ROM astfel : programul este stocat în memorie iar unitatea aritmetico-logică(ALU) citește o instrucțiune din memorie, decodează instrucțiunea citită și o execută. După terminarea instrucțiunii curente, o altă instrucțiune este luată din memorie pentru a fi procesată. Acest procedeu se va executa până la finalizarea instrucțiunilor din memorie. Programul este scris într-un limbaj de programare care poate să difere de la un microcontroller la altul. După nivelul de abstractizare există mai multe categorii de limbaje care vor fi utilizate în programarea memoriei unui microcontroller :

  • limbaje de generația I : limbaje cod-mașină.
  • limbaje de generația a II-a : limbaje de asamblare.
  • limbaje de generația a III-a : limbaje de nivel înalt.

Pentru executarea unui program scris într-un limbaj oarecare, există, în principiu, două abordări: compilare sau interpretare. La compilare, compilatorul transformă programul-sursă în totalitate într-un program echivalent scris în limbaj mașină, care apoi este executat. La interpretare interpretorul ia prima instrucțiune din programul-sursă, o transformă în limbaj mașină și o execută; apoi trece la instrucțiunea două și repetă aceleași acțiuni ș.a.m.d.

Limbajul cod-mașină[modificare | modificare sursă]

Limbajul cod mașină este un sistem de instrucțiuni și date executate direct de unitatea centrală de procesare. Acest limbaj poate fi privit ca un limbaj de programare primitiv sau ca cel mai mic nivel de reprezentare a unui program. Limbajul cod-mașină se bazează pe sistemul binar de enumerații și diferă de la un microprocesor la altul. Fiecare familie de procesoare are propriul set de instrucțiuni cod-mașină. Instrucțiunile sunt modele de biți, care prin reprezentarea lor fizică, corespund diferitelor comenzi ale mașinii. Setul de instrucțiuni este astfel specific unei clase de microprocesoare ce folosesc aceeași arhitectură. Modele ulterioare sau derivate ale aceleiași arhitecturi de microprocesor includ toate instrucțiunile predecesorului microcprocesor plus un set additional de instrucțiuni. Ocazional, un model ulterior apărut poate să modifice sensul instrucțiunilor de cod(în general pentru că au nevoie de o noua întrebuințare), afectând astfel compatibiliatea codului pe modele de microprocesoare derivate. Setul de instrucțiuni al unui microprocesor poate avea instrucțiuni de lungime egale sau poate avea instrucțiuni de lungime variabilă.

Limbaj de nivel înalt[modificare | modificare sursă]

Un limbaj de programare de nivel înalt este un limbaj cu o abstractizare puternică față de instrucțiunile unui microcontroller. În comparative cu limbajele de programare de nivel scăzut, limbajele de nivel înalt manipulează concepte apropiate de limbajul natural ce îl fac mai ușor de înțeles, de utilizat și oferă o portabilitate pe mai multe platforme. În anumite cazuri, o singură linie de program scrisă într-un astfel de limbaj poate echivala cu sute de linii de program scrise în cod mașină. Un alt avantaj îl reprezintă reducerea timpului necesar realizării unui program precum și depanarea acestuia. Însă, pe măsură ce limbajul are un nivel mai înalt, execuția programului de către microcontroller va fi mai lentă. În general programarea în limbaje de nivel înalt nu este folosită în situațiile în care resursele microcontrolerului sunt limitate. Acest limbaj are nevoie de un spațiu de memorie mai mare și fișiere de cod intermediare care duc la îngreunarea execuției programului. Cu toate acestea, datorită complexității crescânde a microcontrollerelor, a optimizării compilatoarelor pentru limbaje de nivel înalt ce produc fișiere de cod comparabile în eficiență cu cele scrise în limbaje de nivel scăzut, limbajele de nivel înalt oferă rezultate mai bine decât restul limbajelor în anumite situații.

Limbajul C[modificare | modificare sursă]

Limbajul C, deși este un limbaj de nivel înalt, păstrează contactul cu partea hardware a unui microcontroller. Printre facilitățile pe care le oferă limbajul C putem enumera : facilitate pentru manipularea biților, a câmpurilor de biți, manipularea funcțiilor cu pointeri la funcții precum și adresarea directă a memorie.