Sisteme de operare
Deseori, sistemele încorporate nu au nevoie de un sistem de operare complet. Unele folosesc sisteme de operare mici și simple, special construite, care pornesc foarte repede, altele nu au nevoie deloc de unul. Sistemele încorporate nu se adaptează la fel de ușor, dar sunt construite pentru a-și îndeplini sarcinile mult mai fiabil. Deoarece hardware-ul este mai simplu, este, de asemenea, adesea mai ieftin de construit și funcționează mai rapid.
Spre deosebire de acesta, un computer de uz general trebuie să fie pregătit să primească noi drivere de dispozitiv și software pentru a rula hardware pe care nu îl cunoaște încă, cum ar fi imprimante sau hard disk-uri noi. Acesta trebuie să ruleze diferite programe de aplicații.
Pe măsură ce sistemele încorporate devin mai mari, lucruri care înainte erau doar pe computerele de uz general sau chiar pe mainframe-uri devin acum comune pe sistemele încorporate. Printre acestea se numără spațiul de memorie protejat și mediul de programare deschis, inclusiv Linux, NetBSD etc.
Câteva exemple de sisteme de operare, de la simplu la complex:
- Bucla de control simplă - Un temporizator și o buclă sunt utilizate pentru a apela diferite subrutine în mod repetat. Aceasta este adesea realizată de o singură persoană pentru sisteme mai mici.
- controlat prin întreruperi - Sarcinile sunt lansate de diferite tipuri de evenimente. Evenimentul poate fi ceva cronometrat (la fiecare zece secunde, de exemplu) sau prin apăsarea unui buton sau prin datele primite.
- multitasking nepreemptiv - Fiecare sarcină își primește rândul să ruleze, iar atunci când se termină apelează la un programator din sistemul de operare pentru a rula următoarea sarcină.
- multitasking preemptiv sau multithreading - O sarcină poate fi oprită după un anumit interval de timp pentru a permite unei alte sarcini să ruleze pentru o perioadă de timp. Niciun task nu poate acapara sistemul. La acest nivel, se consideră că sistemul are un nucleu de "sistem de operare" și poate rula sarcini în paralel. Acest tip de sistem de operare este de obicei cumpărat de la o companie care lucrează numai cu sisteme de operare integrate.
Sistemele de operare în timp real includ produse precum MicroC/OS-II, Green Hills INTEGRITY, QNX sau VxWorks. Spre deosebire de MacOS sau Windows 7, aceste sisteme de operare nu sunt cunoscute foarte bine de majoritatea oamenilor. Dar ele sunt folosite în multe locuri unde timpul și siguranța sunt foarte importante. Oamenii le folosesc în fiecare zi și nu-și dau seama de acest lucru.
Exemple comune de nuclee mai mari sunt Embedded Linux și Windows CE. Deși acestea nu au limitele de timp stricte necesare pentru un sistem strict în timp real, ele devin din ce în ce mai frecvente, în special pentru dispozitive mai puternice, cum ar fi routerele wireless și GPS-urile. Acestea permit reutilizarea codului din domeniul public pentru drivere de dispozitive, servere web, firewall-uri și alte coduri. Dezvoltatorii de software care se simt mai confortabil să scrie aplicații pentru PC-uri vor găsi și ei acest lucru mai familiar. Dacă este necesar, se poate utiliza un FPGA sau alt hardware special pentru lucrurile care necesită limite de timp stricte.
Unelte
Ca și în cazul altor software, proiectanții de sisteme integrate utilizează compilatoare, asamblatoare și depanatoare pentru a dezvolta software pentru sisteme integrate. Cu toate acestea, ei pot utiliza și unele instrumente mai specifice:
- Pentru sistemele care utilizează procesarea digitală a semnalelor, dezvoltatorii pot utiliza instrumente matematice precum MATLAB, MathCad sau Mathematica.
- Compilatoare și linkeri personalizați pot fi utilizați pentru a îmbunătăți optimizarea pentru un anumit hardware.
- Un sistem încorporat poate avea propriul său limbaj special sau instrument de proiectare sau poate adăuga îmbunătățiri la un limbaj existent, cum ar fi cel utilizat de Basic Stamp.
Instrumente de depanare:
- Un depanator în circuit (ICD), un dispozitiv hardware care se conectează la microprocesor prin intermediul unei interfețe JTAG. Acesta pornește și oprește microprocesorul din exterior în timp ce rulează software-ul. De asemenea, permite citirea memoriei și a registrelor și stocarea programului software în memorie.
- Depanare externă prin logare sau prin ieșirea pe portul serial pentru a urmări funcționarea folosind fie un monitor intermitent (printfs).
- Depanarea interactivă rezidentă - dacă sistemul de operare o acceptă, acesta este un shell pe procesorul încorporat care execută comenzi scrise de dezvoltator (Linux, de exemplu).
- Un emulator în circuit înlocuiește microprocesorul de pe placă, asigurând un control total asupra a tot ceea ce ar putea face microprocesorul.
- Un emulator complet simulează toate caracteristicile hardware-ului, permițând controlul și modificarea acestuia. Hardware-ul nu există cu adevărat, dar o versiune falsă a acestuia (o mașină "virtuală") se află pe un PC normal.
- Verificarea liniilor externe cu un analizor logic sau un multimetru.
Cu excepția cazului în care nu se limitează la depanarea externă, programatorul poate, de obicei, să încarce și să ruleze software-ul prin intermediul instrumentelor, să vizualizeze codul care rulează în procesor și să pornească sau să oprească funcționarea acestuia. Codul poate fi vizualizat sub formă de cod de asamblare sau de cod sursă. Unele sisteme integrate (cum ar fi VxWorks sau Green Hills) au caracteristici speciale, cum ar fi urmărirea spațiului ocupat de software în timp ce rulează, a sarcinilor care rulează și a momentului în care se întâmplă anumite lucruri.
În funcție de tipul de sistem încorporat care este realizat va afecta modul în care acesta poate fi depanat. De exemplu, depanarea unui sistem cu un singur microprocesor este diferită de depanarea unui sistem în care procesarea se face și pe un periferic (DSP, FPGA, coprocesor).