Instrumente de dezvoltare software
Programarea microcontrolerelor se realizează de obicei în limbaj de asamblare sau în C (deşi au apărut deja variante de programare în alte limbaje - BASIC fiind un exemplu demn de luat în considerare).
Programarea în limbaj de asamblare constă în instrucţiuni (codificate prin mnemonice scurte) şi operanzi corespunzători operaţiilor elementare oferite de controler.
Asambloarele sunt oferite de obicei gratis de producătorii controlerelor, pe când compilatoarele C variază de la gratis (când este posibil să fie incomplete sau pline de bug-uri) până la preţuri prohibitive de mii de dolari (cu un număr modest de bug-uri). Până în prezent nu există medii C similare cu cele de pe PC la capitolul facilităţi, dar tendinţa clară este o apropiere de acestea.
Monitorul (Programul monitor)
Programul monitor este o aplicaţie rulată de controler care comunică cu un PC de obicei prin intermediul interfeţei seriale. Capabilităţile unui asemenea program sunt în general reduse. Un program monitor tipic este o aplicaţie DOS sau o aplicaţie care rulează într-o fereastră de tip DOS. Deşi caracteristicile variază de la un program la altul, un monitor poate în general transmite mesaje text şi numere către utilizator, folosind un port serial al microcontrolerului, care nu va mai putea fi utilizat în alte scopuri. De cele mai multe ori este posibilă oprirea execuţiei programului testat şi inspectarea sau chiar modificarea memoriei RAM, respectiv a registrelor. Importanţa şi răspândirea acestui instrument este în continuă scădere, tinzându-se la înlocuirea lui cu medii de programare integrate, dezvoltate sub Windows.
Mediul integrat de dezvoltare (IDE - Integrated Development Environment)
Aplicaţiile Windows au devenit un standard care înlocuiește vechile programe DOS asociate microcontrolerelor. Mai mult, în prezent un singur mediu integrat oferă posibilitatea:
1. asamblării (uneori şi compilării!);
2. simulării;
3. editării de legături;
4. lucrului cu biblioteci;
5. testării (în mod debugger sau emulator);
6. generării codului obiect fmal în format hexazecimal sau binar;
7. conectării la programator şi programării circuitului.
Pentru Microchip; mediul integrat se numeşte MPLAB şi este gratuit, iar ultima versiune se poate descărca de la adresa Internet a firmei: www.microchip.com.
Asamblorul
Asamblorul este programul care prelucrează instrucțiunile scrise într-un limbaj simbolic pentru calculator, traducându-le în coduri ale limbajului mașină.
Codul scris în limbaj de asamblare este de obicei mai scurt şi mai performant (ca durată de execuţie) comparat cu cel elaborat în C. O serie de alte avantaje determină însă tot mai multe companii să aleagă programarea în C (şi în viitorul apropiat probabil în Visual C!):
• uşurinţa elaborării codului sursă;
• reutilizarea codului prin portarea extrem de simplă pe alte platforme;
• standardizarea uşoară;
• posibilitatea elaborării şi managementului unor programe laborioase şi a unor structuri de date dinamice greu sau imposibil de obţinut în asamblare;
• eliberarea uşoară a memoriei RAM nefolosite pentru alte variabile.
În urma asamblării se poate genera:
• un cod absolut, la adresele fixe stabilite de utilizator;
• un cod relocabil, la care adresele sunt în principiu alocate de editorul de legături.
Deşi asambloarele au o sarcină relativ simplă, nu există un standard ANSI pentru ele, de aceea sintaxa variază de la un asamblor la altul. În plus limbajul de asamblare este specific fiecărei familii de microcontrolere. Un asamblor puternic oferă capabilităţi de macroinstrucțiuni imbricate (adică grup de instrucțiuni suprapuse) cu etichete locale, bucle imbricate de asamblare condiţionată şi mesaje de eroare clare şi explicite.
Pentru Microchip, asamblorul oferit se numeşte MPASMWIN, face parte din pachetul MPLAB şi este gratuit.
Editorul de legături concatenează diversele module rezultate în urma asamblării și alocă adrese pentru aceste module, dar şi pentru variabile din memoria RAM. Editarea de legături permite între altele lucrul în echipă, reutilizarea codului, facilităţi care se aplică în cadrul proiectelor de dimensiuni mari.
Pentru Microchip, editorul de legături se numeşte MPLINK, face parte din pachetul MPLAB şi este gratuit.
Bibliotecarul
O dată testate, diferitele subrutine asamblate/compilate pot fi „colecţionate" în biblioteci. Această funcţie este îndeplinită de un program specializat, numit bibliotecar. Pentru Microchip, bibliotecarul se numeşte MPLIB, face parte din pachetul MPLAB şi este gratuit.
Simulatorul
Simulatorul este un instrument software care câştigă tot mai mult teren datorită creşterii performanţelor şi a costului scăzut sau nul. După cum îi sugerează numele, acesta este un program care simulează comportarea microcontrolerului pe un PC, permiţând rularea pas cu pas, examinarea şi/sau modificarea registrelor, a memoriei, etc. Simulatoarele performante oferă facilităţi suplimentare, cum ar fi:
• stimulare asincronă;
• fişiere de stimuli care permit modificări controlate pentru I/O;
• simulare de periferice complexe: timere, PWM, ADC, etc.
• simularea evenimentelor complexe: întreruperi, WDT, etc.
Cu toate că reprezintă un instrument deosebit de valoros de dezvoltare şi testare, simulatoarele nu pot rezolva o serie de probleme legate de comportarea în timp real a controlerului. Nici un simulator nu se apropie măcar de viteza de operare a controlerului simulat. Pentru Microchip, simulatorul se numeşte MPSIM, face parte din pachetul MPLAB şi este gratuit.
Este evident că pentru funcţionare, simulatorul nu are nevoie de nici un fel de hardware.
Instrumente de dezvoltare hardware
Debugger-ul
Debugger-ul este un instrument hardware asistat de un software corespunzător prin care se testează în anumite limite funcţionarea aplicaţiei dezvoltate. Debugger-ul foloseşte chiar microcontrolerul din aplicaţie pentru rulare pas cu pas, interogare de registre, afişare de stări, etc. De cele mai multe ori facilitatea de debug este combinată cu cea de programare (care se realizează uzual serial pe 2-4 fire). În concluzie, cu preţul a câtorva locaţii folosite din memoria
RAM şi câteva zeci din cea ROM, a 2-4 pini folosiţi pentru comunicare, se poate executa un program în regim pas cu pas, se pot seta puncte de întrerupere, se pot vizualiza şi modifica registrele procesorului, etc.
În acest mod se poate verifica funcţionarea aplicaţiei foarte aproape de situaţia reală şi se pot corecta o serie de greşeli care au scăpat simulării. Nu se pot totuşi depista corelaţiile din timp real (comunicaţia cu debugger-ul consumă timp). Un debugger reprezintă o alegere corectă pentru o firmă mică, care nu-şi poate permite un emulator.
Emulatorul
Un emulator este un instrument hardware asistat de un software corespunzător care permite explorarea totală a controlerului şi rularea pas cu pas a programului. Un emulator este un echipament extern care comunică cu PC-ul prin interfaţa serială sau paralelă, şi este ataşat prin intermediul unui dispozitiv conectat în locul microcontrolerului emulat; acest ansamblu se comportă identic cu microcontrolerul emulat. Emulatorul va fi întotdeauna un circuit în timp real (la fel de rapid ca procesorul martor) şi oferă toate facilităţile acestuia. Altfel spus el se conectează în locul microcontrolerului în sistemul pentru care se dezvoltă aplicația, permițând un control total al sistemului țintă, în timp real, fără a folosi nimic din resursele acestuia.
Emulatoarele sunt specifice fiecărei familii de controlere. Emulatoarele sunt extrem de scumpe, de la 2.000 USD la 20.000 USD. Au apărut pe piaţă o serie de echipamente ieftine, sub 1.000 USD, denumite comercial "emulatoare", care sunt debugger-e mai mult sau mai puţin performante - acestea vor folosi o parte din resursele procesorului martor (unele locaţii RAM, memorie RAM şi minim două linii I/O). Asemenea echipamente nu pot funcţiona în timp real şi nu pot testa integral comportarea microcontrolerului emulat în circuit. Chiar un emulator "cinstit" diferă ca şi caracteristici electrice de controlerele emulate (curenţi de intrare/ieşire, temporizări), iar de cele mai multe ori nu pot opera la tensiuni şi frecvenţe de tact reduse.
Programatorul
După asamblarea şi/sau compilarea codului sursă, fişierul hexazecimal generat trebuie "introdus" în microcontroler. Acest lucru se poate realiza:
1. prin intermediul unui programator de memorii EPROM în cazul variantelor de controlere fără memorie program. Circuitul EPROM astfel programat se va introduce într-un soclu pe placa microsistemului. Orice reprogramare a memoriei presupune o ştergere prin expunerea memoriei EPROM la radiaţii ultraviolete timp de circa 30 de minute şi apoi reprogramarea în programator.
2. prin intermediul unui emulator de EPROM, realizat de obicei cu ajutorul unei memorii SRAM. Emulatorul se conectează la soclul memoriei EPROM şi se comportă ca o memorie EPROM, păcălind microsistemul că ar fi o memorie EPROM. Reprogramarea este extrem de rapidă în acest caz, emulatorul fiind legat de obicei la un PC prin intermediul portului paralel sau mai rar serial. Din păcate un emulator de EPROM este o piesă relativ costisitoare iar dezvoltarea soluţiilor FLASH a făcut această opţiune mai puţin atractivă.
3. pentru variantele OTP şi FLASH, utilizarea unui programator specific familiei de controlere este obligatorie, deoarece specificaţiile de programare pentru fiecare tip de controlere sunt clare şi publice, pe Internet se găsesc o serie de scheme de programatoare simple şi uşor de construit. Asemenea programatoare se conectează la PC cel mai adesea pe portul paralel, dar şi portul serial este uneori folosit. Un microcontroler FLASH cu un programator simplu (de pe Internet) şi un mediu IDE gratuit reprezintă cu siguranţă cea mai ieftină combinaţie prin intermediul căreia se poate dezvolta un proiect cu microcontroler astăzi.