Aplicatii Software Pentru Sisteme Embedded

Lucrare de licenta

Cuprins

Definirea temei

Introducere

Sisteme inglobate

Nuclee de procesoare

Circuite embedded cu FPGA

Software pentru sisteme embedded

Sisteme de operare pentru sisteme embedded

Drivere pentru module periferice

Medii de dezvoltare a aplicatiilor software pentru sisteme embedded

Nuclee ARM

Circuite FPGA Zynq 7000

Mediul Vivado si Xilinx EDK

Ubuntu pentru Zybo

Modulul Zybo

Proiectarea sistemelor de tip embedded linux

Descrierea diverului si implementarea lui

Descrierea aplicatiei de testare a driverului

Rezultate

Concluzii

Anexe

Poze sistem

Cod driver

Cod aplicatie

Bibliografie

Sisteme inglobate

Termenul “sistem inglobat” provine din limba engleza de la expresia “embedded system” si este un sistem informatic cu o funcție dedicată în cadrul unui sistem mecanic sau electric mai mare, de multe ori cu constrângerile de calcul în timp real. Acesta este incorporat ca parte a unui dispozitiv complet, de multe ori inclus in hardware sau in sisteme mecanice. Sistemele inglobate controleaza multe dispozitive utilizate astazi.

Proprietatile tipice calculatoarelor inglobate in comparatie cu cele de uz general sunt:

-consum mic de energie;

-dimensiuni mici;

-intervale de operare mari;

-low-cost per unitate.

Sistemele inglobate moderne sunt de obicei bazate pe microcontrolere (de exemplu UCP-uri cu memorie integrata sau interfete pentru periferice), dar microprocesoarele uzuale(cele care folosesc cipuri de memorie externa si circuite pentru interfatarea perifericelor) sunt inca folosite mai ales in sistemele complexe.In ambele cazuri procesoarele folosite pot fi procesoare de uz general,specializate in anumite categorii de calcule sau proiectate personalizat pentru aplicatia respectiva. O clasa standard de procesoare dedicate sunt procesoarele de semnal(DSP).

Deoarece un sistem integrat este dedicat unei anumite sarcini, inginerii care poiecteaza respectivul sistem, il pot optimiza pentru a reduce dimensiunea si costul produsului, dar si de a creste fiabilitatea si performanta.

Sistemele integrate variaza de la dispozitive portabile(ceasuri digitale si MP3 playere) la instalatii mari stationare(semafoare, diferite controllere intr-o fabrica) si sisteme complexe cun ar fi vehiculele hibride,RMN.Complexitatea variaza de la mici ,cu un singur microcontroler, la foarte mari cu mai multe microcontrolere,periferice si retele montate in interiorul unui sasiu sau a unei incinte.Ele sunt folosite in diverse aplicatii de consum, gatit, industriale, automotive, medicale, comerciale si militare.

Sistemele integrate sunt concepute pentru a face unele sarcini specifice decat sa fie calculatoare de uz general folosite pentru mai multe sarcini.Unele au constrangeri in performantele timpului de raspuns, constrangeri care trebuie respectate din motive de siguranta si aplicabilitate;altele pot avea performante scazute pentru a permite sistemului hardware sa fie simplu si sa aiba cost redus.

Sistemele integrate nu sunt intotdeauna dispozitive independente.Multe sisteme integrate sunt formate din parti mici, computerizate in cadrul unui dispozitiv mai mare, care serveste un scop mai general. În mod similar, un sistem integrat într-un automobil oferă o funcție specifică în subsistem al masinii in sine.

Instrucțiunile program scris pentru sistemele integrate sunt denumite firmware, și sunt stocate în memorii read-only sau cipuri de memorie flash.Firmwarele ruleaza pe sistele cu resurse limitate: memorie mică,tastatura sau ecran mic sau inexistent.

Interfața cu utilizatorul

Sistemele inglobate variază de la nici o interfață, la sisteleme dedicate doar pentru o singură sarcină, la interfețe grafice cu utilizatorul complexe care seamănă cu sistemele de operate moderme pentru computerele desktop. Dispozitivele simple înglobate folosesc butoane, LED-uri,LCD-uri grafice sau alfanumerice, cu un meniu simplu.

Unele sisteme oferă interfață cu utilizatorul de la distanță cu ajutorul unei conexiune serială (de exemplu, RS-232, USB, I²C, etc.) sau conexiunea de rețea (de exemplu, Ethernet). Această abordare oferă mai multe avantaje cum ar fi extinderea capacității sistemului integrat, evitarea costul unui display și permiterea de a construi o interfață cu utilizatorul bogată pe PC. Un bun exemplu în acest sens este o combinație de un server Web încorporat care rulează pe un dispozitiv încorporat sau un router de rețea. Interfața cu utilizatorul este afișată într-un browser web de pe un PC conectat la aparat, prin urmare nu au nevoie de un software pentru a fi instalate.

Procesoare in sisteme inglobate

Procesoare integrate pot fi împărțite în două mari categorii:

-microprocesoare obișnuite (μP) au circuite integrate separate pentru memorie și periferice.

.microcontrolere (μC) au periferice on-chip, reducând astfel consumul de energie, mărimea și costul.

Sunt folosite mai multe arhitecturi ale procesorului, deoarece software-ul dezvoltat este personalizat pentru o aplicație, nu este un instalat de către utilizatorul final. Sunt folosite atât arhitectura Von Neumann, precum și diferite grade de arhitecturi Harvard, atât procesoare RISC precum procesoare non-RISC. Lungimea instrucțiunilor variază de la 4 biți la 64 de biți,chiar si mai mari, deși cele mai tipice rămâne 8/16 biți. Cele mai multe arhitecturi vin într-un număr mare de variante în diferite forme, fiind produse companii diferite.

Solutii ASIC si FPGA

O configuratie obisnuita pentru sistemele embedded cu volum ridicat este sistemul pe un chip (SoC) care contine un sistem complet alcatuit din mai multe procesoare, multiplicatori, provizii si interfete pe un singur chip. SoC-urile pot fi implementate ca un circuit integrat cu aplicatii specifice (ASIC) sau folosind field-programmable gate array (FPGA)

Periferice

Sistemele embedded comunica cu lumea exterioara prin intermediul perifericelor, precum:

-Interfete de comunicatie seriala (SCI) : RS-322, RS-422, RS-485 etc.

-Interfete de comunicatie seriala sincronica: I2C, SPI, SCC si ESSI

-Universal Serial Bus(USB)

-Retele: Ethernet, Controller Area Network, Lon Works etc.

-Regulatori: PLL(s), Capture/Compare si Time Processing Units

-IO discret: aka General Purpose Input/Output(GPIO)

-Analog cu Digital/Digital cu Analog(ADc/DAC)

-Debugging: JTAG, ISP, ICSP, BDM Port

Instrumente

Cat despre alte software-uri, proiectantii de sisteme embedded utilizeaza compilatoare, assemblere si debuggere pentru a dezvolta software-ul sistemelor embedded. Insa, ei utilizeaza mai multe instrumente specifice:

-In circuitul debugger-elor sau emulatoarelor;

-Utilitati de adaugare a unui checksum sau CRC la un program, astfel incat sistemele embedded pot verifica daca programul este valid;

-Pentru sistemele care utilizeaza procesarea semnalului digital, specialistii pot folosi o metoda matematica precum Scilab/Scicos, MATLAB/Simulink, EICASLAB, MathCad sau Mathematica pentru a simulari matematice. Ei pot utiliza de asemenea bilbioteci atat pentru host, cat si pentru target care elimina rutinele de dezvoltare a DSP, ca in DSPnano RTOS si Sistemul de Operare Unison;

-Compilatoare personalizate si legaturile pot fi utilizate pentru a imbunatati optimizarea pentru harware-ul respectiv;

-Un sistem embedded poate avea limbajul sau special sau instrument de design, sau adaugari la un limbaj existent precum Forth sau Basic;

-Alta alternativa este adaugarea unui sistem de operare in timp real sau sistem de operare embedded, care poate avea caracteristici DSP precum DSPnano RTOS.

Instrumentele de software pot proveni din cateva surse:

-Companiile de software care se specializeaza pe piata de sisteme embedded;

-Preluat din instrumentele de dezvoltare a software-ului GNU;

Uneori, instrumentele de dezvoltare pentru un personal computer pot fi folosite daca procesorul embedded este apropiat de un procesor PC.

Pe masura ce complexitatea sistemelor embedded creste, instrumentele de nivel mai inalt si sistemele de operare migreaza in mecanismul unde isi au locul. De exemplu, telefoanele mobile, asistentii personali digitali si alte consumatoare de computere deseori au nevoie de un software important care este achizitionat sau oferit de o alta persoana decat fabricantul de electronice. In aceste sisteme, un mediu de programare deschis, precum Linux, NetBSD, OSGi sau Java embedded este cerut pentru ca al treilea furnizor sa poata vinde pe o piata mai larga.

Debugging

Embedded Debugging pot fi executate la nivele diferite, depinzand de facilitatile disponibile. De la cele mai simple la cele mai sophisticate, ele pot fi grupate in mod obisnuit in urmatoarele categorii:

-Debugging interactiv resident, folosind o carcasa simpla oferita de sistemul de operare embedded (de exemplu, Forth si Basic);

-Debugging extern folosind inregistrarea sau portului de iesire pentru a urmari operatia folosind fie un monitor in flash, fie folosind un debug server precum Remedy Debugger care lucreaza pentru sistemele heterogene multicolore;

-Un debugger in circuit (ICD), un dispozitiv hardware care se conecteaza la un procesor printr-o interfata JTAG sau NEXUS. Acest lucru permite ca operatia procesorului sa fie reglata extern, dar este in mod characteristic restrictionata la caracteristicile specifice de debugging in procesor;

-Un emulator in circuit inlocuieste microprocesorul cu un echivalent simulate, oferind control complet asupra tuturor aspectelor ale microprocesorului;

-Un emulator complet ofera o simulare a tuturor aspectelor hardware-ului, permitand ca toate acestea sa fie controlate sau modificare, si permitand debugging-ul pe un PC normal.

Doar daca nu este restrictionat la debugging extern, programatorul poate sa incarce si sa ruleze un software prin intermediul instrumentelor, sa vada codul ruland in procesor, si sa porneasca sau sa opreasca operatia. Vizualizarea codului poate fi facuta ca un cod de asamblare sau ca un cod sursa.

Pentru ca un sistem embedded este deseori compus dintr-o varietate mare de elemente, strategia de debugging poate varia. Spre exemplu, debugging-ul unui sistem embedded cu un software-(si microprocesor-) centric este diferi de debugging-ul unui sistem embedded unde cea mai mare parte a procesarii este realizata de periferice(DSP, FPGA, co-procesor). Un numar crescator de sisteme embedded, utilizeaza astazi mai mult decat un singur procesor de baza. O problema obisnuita cu dezvoltarea multi-core este sincronizare adecvata a executarii software-ului. Intr-un asemenea caz, proiectare sistemului embedded poate cere verificarea traficului de date in bus-uri intre core-urile procesorului, ceea ce cere un debugging la un nivel scazut, la nivelul semnalului/bus-ului, cu un analizator logic, de exemplu.

Siguranta

Sistemele embedded deseori rezida in dispozitive care se asteapta sa ruleze continuu ani de zile fara erori, si in unele cazuri sa se refaca singure daca se produce vreo eroare.

Prin urmare, software-ul este de obicei dezvoltat si testat cu mai multa atentie decat acelea pentru PC-uri, si partile mecanice deplasabile de neincredere precum disk drive-urile, switch-urile sau tastele sunt evitate.

Problemele specifice de incredere pot include:

Sistemul nu poate fi inchis in siguranta pentru reparatii, sau este prea inaccesibil pentru reparatii. Exemplele include sisteme spatiale, cable submarine, faruri de navigatie, si automobile;

Sistemul trebuie mentinut in functiune din motive de siguranta. ,,Limp mode-urile” sunt mai putin tolerabile. Deseori rezervele sunt selectate de operator. Exemplele includ navigatia aeriana, sistemele de control a reactoarelor, controlul fabricilor de produse chimice cu siguranta cruciala, semnale de tren, motoare sau avioane cu un singur motor;

Sistemul va pierde cantitati mari de bani cand se inchide: switch-uri de telefon, reglari de lifturi si poduri, transferuri de fonduri, vanzarile si serviciile automate.

O varietate de tehnici sunt utilizate, uneori in combinatie, pentru a reveni din erori – software bugs precum scurgerile de memorie si erorile de soft in hardware:

Ø      Watchdog timer care reseteaza calculatorul doar daca software-ul nu instiinteaza periodic watchdogul;

Ø      Subsistemele cu spare-uri redundante in care pot fi schimbate;

Ø      Software-urile “limp modes” care ofera functii partiale;

Ø      Proiectarea cu o arhitectura Trusted Computing Base (TCB) asigura un mediu cu o siguranta si o incredere ridicate a sistemului;

Ø      Hipervisor-ul embedded este capabil sa asigure incapsularea securitatii pentru orice componenta a subsistemului , astfel ca o componenta a software-ului compromise sa nu poata interveni in alte subsisteme, sau in alte privileged-level software-uri pentru sistem. Aceasta incapsulare retine erorile de la propagarea dintr-un sistem intr-altul, imbunatatind increderea. Acest lucru poate permite, de asemenea, unui sistem sa fie inchis in mod automat si restartat la detectarea unei probleme;

Ø      IAP (Immunity Aware Progamming)

·        Volumul ridicat vs. scazut

Pentru sistemele cu volum ridicat precum player-ele portabile de muzica sau telefoanele mobile, minimalizarea costului este de obicei motivul principal al proiectarii. Inginerii, in mod caracteristic, selecteaza hardware-uri care sunt “numai bune” pentru a implementa functiile necesare.

Pentru sistemele cu volum scazut sau prototipurile sistemelor embedded, computerele universale pot fi adaptate prin limitarea programelor sau prin inlocuirea sistemului de operare cu un sistem de operare in timp real.

2.4.3. Arhitecturi ale software-ului embedded

Exista cateva tipuri diferite de arhitectura a software-ului in uzul obisnuit.

Bucla de reglare simpla

In aceasta proiectare, software-ul pur si simplu are o bucla. Bucla necesita subroutine, fiecare ocupandu-se de o parte a hardware-ului sau a software-ului.

·        Sistemul de reglare intrerupta

Unele sisteme embedded sunt predominant reglate in mod intrerupt. Acest lucru inseamna ca sarcinile ca sarcinile indeplinite de sistem sunt oprite prin diferite tipuri de evenimente. O intrerupere poate fi generata de exemplu, de un regulator intr-o frecventa predefinita, sau printr-un controller pentru port serial primind un byte.

Aceste feluri de subsisteme sunt utilizate daca event handlers au nevoie de o potentialitate scazuta si daca sunt scurte si simple.

De obicei, aceste tipuri de sisteme ruleaza o sarcina simpla si intr-o bucla principala, dar aceasta sarcina nu este foarte sensibila la intarzierile neasteptate.

Uneori, intermediarul intrerupt va adauga in continuare sarcini la o coada a structurii. Mai tarziu, dupa ce intreruperea handler-ului s-a incheiat, aceste sarcini sunt executate de o bucla principala. Aceasta metoda aduce sistemul aproape de nucleul multitasking-ului cu procesele distincte.

·        Multitasking cooperativ

Un sistem multitasking nepreventiv este foarte similar cu schema buclei de reglare, exceptand ca bulca sa fie ascunsa intr-un API. Programatorul defineste o serie de sarcini, si fiecare sarcina primeste propriul mediu in care sa ,,ruleze”. Cand o sarcina este inactiva, este nevoie de o rutina inactiva, de obicei numita ,,pauza”, ,,asteptare”, ,,renuntare”, ,,nop” (vine de la ,,nicio operatie) etc.

Avantajele si dezavantajele sunt foarte similare cu bucla de reglare, doar ca adaugarea unui nou software este mai usoara, prin simpla scriere a unei sarcini, sau adaugand-o la queue-interpreter.

·        Multitasking preventiv sau multi-threading

In acest tip de sistem o componenta de nivel scazut a codului se schimba intre sarcini sau regulatori de baza (conectati la o intrerupere). Acesta este nivelul la care sistemul este in general considerat a avea kenel de ,,sistem de operare”. Depinzand de cata functionalitate este ceruta, introduce mai mult sau mai putin din complexitatea din administrarea multiplelor sarcini ruland in paralel.

Deoarece orice cod poate in mod potential sa afecteze datele unei alte sarcini (exceptie facand sistemele mai mare utilizand un MMU), programele trebuie proiectate si testate cu grija, iar accesul la datele impartasite trebuie reglat de unele strategii de sincronizare, precum cozile de mesaje, semafoarele sau schema de sincronizare care nu blocheaza.

Din cauza acestei complexitati, este un lucru obisnuit pentru organizatii sa cumpere un sistem de operare in timp real, permitand programatorilor de aplicatii sa se concentreze mai mult pe functionalitatea dispozitivului, decat pe functiile sistemului de operare, cel putin pentru sistemele mai mari; sistemele mai mici deseori nu pot accepta suprasarcini asociate cu un sistem generic in timp real, datorita limitarilor in ceea ce priveste marimea memoriei, performanta si/sau durata bateriei.

·        Microkerneluri si exokerneluri

Un microkernel este un pas logic de la un sistem de operare in timp real. Aranjarea obisnuita este aceea ca kernelul sistemului de operare aloca memorie si schimba CPU in diferite sarcini de executie. Procesele user mode implementeaza majoritatea functiilor precum fisierele de sistem, retea, interfete etc.

In general, microkernelurile reusesc cand schimbarea sarcinilor si circulatia intersarcinilor sunt rapide, si dau gres cand sunt foarte lente.

Exokernelurile comunica eficient prin apelari normale ale subrutinei. Hardware-ul si toate componentele software din sistem sunt disponibile programatorilor si extensibile prin aplicatii.

·        Kerneluri monolitice

In acest caz, un kernel relativ larg cu caracteristici sofisticate este adaptat sa se potriveasca unui mediu embedded. Acest lucru ofera programatorilor un mediu similar cu un sistem de operare desktop, precum Linux sau Microsoft Windows, si astfel este foarte productiv pentru dezvoltare, pe de alta parte, cere considerabil mai multe resurse hardware, este deseori mai scump, si din cauza complexitatii acestor kerneluri poate fi mai putin prevazatoare sau de incredere.

Exemplele obisnuite de kerneluri monolitice embedded sunt Embedded Linux si Windows CE.

In ciuda costului crescut in ceea ce priveste hardware-ul, acest tip de sistem embedded este in crestere de popularitate, in special la dispozitivele embedded mai puternice, precum Wireless Routers si Sistemele de Navigatie GPS. Cateva dintre motive sunt:

Ø      Porturi pentru chip-urile embedded obisnuite sunt dispobibile;

Ø      Ele permit reutilizarea codurilor disponibile public pentru Device Drivers, Web Servers, Firewalls, si alte coduri;

Ø      Sistemele de dezvoltare pot incepe cu seturi de caracteristici largi, apoi poate fi configurata distributia pentru a exclude functionalitatile nenecesare, si pentru a economisi din cheltuielile cu memoria care ar consuma-o;

Ø      Multi ingineri cred ca rularea unui cod de aplicatii in user mode este mai increzatoare, mai usor de debug si de aceea procesul de dezvoltare este mai usor si codul mai portabil;

Ø      Multe sisteme embedded nu indeplinesc conditiile unui sitem de reglare. UN sistem ca Embedded Linux are un raspuns destul de rapid pentru multe aplicatii;

Ø      Caracteristici cerand raspunsuri mai rapide decat pot fi garantate pot fi plasate in hardware;

Ø      Multe sisteme RTOS au un cost per-unitate. Cand este folosit un produs care este sau va deveni o marfa, acel cost este semnificativ.

·        Sisteme de operare personalizate

O mica parte a sistemelor embedded cere un comportament sigur, oportun, de incredere, de neobtinut cu una din arhitecturile prezentate mai sus. In acest caz, o organizatie construieste un sistem care sa i se potriveasca. In unele cazuri, sistemul poate fi partitionat intr-un ,,controller al mecanismului” folosind tehnici speciale, si un ,,controller de afisaj” cu un sistem de operare conventional. Un sistem de comunicatie trece datele intre cele doua.

·        Componente software aditionale

In adaos la core-ul sistemului de operare, multe sisteme embedded au componente software aditionale cu invelis superior Aceste componente sunt alcatuite dintr-o multime de protocoale, precum CAN, TCP/IP, FTP, HTTP si HTTPS si, de asemenea, capacitati de memorizare, precum FAT si memoria Flash a sistemelor de management. Daca dispozitivul embedded are capacitati audio si video, atunci driverele si codecurile potrivite vor fi prezente in sistem. In cazul kernelurilor monolitice, multe dintre aceste facilitati software sunt incluse. In categoria RTOS, disponibilitatea componentelor de software aditionale depinde de oferta comerciala.

Similar Posts