ARM familie de procesoare
Cea mai importantă sarcină, rezolvată de dezvoltatorii de sisteme încorporate, este obținerea puterii maxime de calcul cu costuri minime de energie electrică. Familia de procesoare ARM are una dintre cele mai bune arhitecturi în acest aspect, oferind un echilibru între puterea procesorului și durata de viață a bateriei.
Miezul ARM se dezvoltă de 20 de ani, timp în care au fost lansate mai multe generații de procesoare. Ultimul dintre ele - sistemul pe procesoarele chip (SoC) - lucrează pe astfel de dispozitive mobile cum ar fi G1 Android de la T-Mobile și are două nuclee (ARM9 și ARM11), ceea ce îmbunătățește performanța aplicații multimedia pe platforme cu resurse de putere reduse.
Cele mai recente versiuni ale procesoarelor ARM suportă două moduri de operare: modul ARM, în care kernelul execută instrucțiuni pe 32 de biți și modul THUMB, în care sunt executate instrucțiuni pe 16 biți. Modul ARM vă permite să utilizați puterea completă a procesorului, în timp ce modul THUMB vă permite să scrieți anumite părți ale programului, respectând restricțiile stricte care economisesc memoria. Comutarea între moduri este foarte simplă, ceea ce vă permite să reduceți semnificativ dimensiunea codului necesar pentru mai mulți algoritmi.
Performanța bună a procesoarelor ARM se realizează prin utilizarea arhitecturii modificate Harvard. În această arhitectură, procesorul utilizează de instrucțiuni și de date cache-uri separate, care, cu toate acestea, sunt pe același autobuz și curățate simultan la accesarea memoriei externe. În plus, instrucțiunile sunt plasate într-un "transportor" în cinci etape. Astfel, procesorul efectuează procesarea paralelă a ultimelor cinci instrucțiuni plasate în conducta: fiecare dintre cele cinci operații separate (citire, decodificare, operații aritmetice și logice, memorie citire și scriere), care constituie o instrucțiune executată în paralel cu celelalte. Astfel, în cazul unui fir continuu de cod de execuție este executat rapid prin paralelism, dar dacă după programul de instruire ramificare va trebui să execute cod care se află în afara transportorului este curățat de toate conținutul conductei, degradează performanța. Morala: ar trebui să proiecteze cu atenție codul folosind o instrucțiune sucursală într-o cantitate minimă.
O oportunitate unică oferită de arhitectura ARM și forțează programatorul să se gândească din nou, este că fiecare instrucțiune poate fi executată cu condiția, în funcție de starea curentă a sistemului de steaguri. Acest lucru vă permite să scapi de instrucțiuni de ramură, în unele algoritmi și, astfel, pentru a menține cea mai bună performanță atunci când se utilizează mecanisme și reglementări de memorare în cache a datelor linie (ca cache-urile de instrucțiuni de ramură pot fi curățate fără a fi nevoie).
GNU ARM Toolkit
Cele mai multe dintre programarea pentru ARM-sisteme, efectuate la stațiile de lucru cu alte procesoare decât ARM, cu ajutorul unor instrumente care efectuează compilării pentru platforma ARM. Una dintre aceste medii de dezvoltare este GNU ARM pachetul de instrumente care vă permite să utilizați instrumente familiare și mediul stația de lucru pentru a proiecta, dezvolta și chiar aplicații de testare pe ARM-simulatoare.
Setul de instrumente GNU descris în acest articol, cunoscut și ca Sourcery G ++ Lite. este situat pe site-ul grupului CodeSourcery (vezi link-ul din secțiunea Resurse) și este disponibil pentru descărcare și utilizare gratuită. Toate instrumentele, cu excepția bibliotecii GNU C, sunt distribuite sub licența publică standard GNU 3 (GPL3). Biblioteca GNU C este distribuită sub licența GPL versiunea 2.1. Setul de utilități binare din acest pachet (binutils) include un set de compilatoare GNU (GCC), un GNU de depanare a codului la distanță (GND), GNU make și utilități GNU de bază.
De asemenea, pachetul Sourcery G ++ Lite include documentația detaliată a setului de instrumente GNU, inclusiv standardele GNU Coding - un document demn de studiu atent! În documentația pentru asamblare GNU, as,. veți găsi o mulțime de informații specifice platformei ARM: coduri de tranzacții, sintaxă, directive și așa mai departe.
Descărcarea și instalarea setului de instrumente GNU
Pentru a descărca un set de instrumente GNU, accesați pagina de descărcare pe site-ul CodeSourcery (a se vedea link-ul în resurse.) Și atunci există TAR-fișier pentru IA32 GNU / Linux:
Diferite versiuni ale setului de instrumente GNU sunt disponibile pentru toate sistemele de operare client obișnuite, dar în acest articol vom examina instalarea și utilizarea versiunii Lite pe un sistem Linux®.
În timpul dezvoltării proiectului ARM au fost elaborate mai multe generații de procesoare. Prin urmare, pachetul Lite include diverse C-biblioteci pentru cele trei versiuni cele mai comune ale arhitecturii procesoarelor - ARM v4T, ARM v5T și ARM 7.
Acum folosiți comanda bunzip2 pentru a extrage arhiva în directorul de acasă.
Listing 1. Extragerea setului de instrumente GNU din arhiva descărcată.
Acum rămâne doar să adăugăm calea spre directorul bin al pachetului în variabila de mediu PATH, după care pot fi folosite instrumentele.
Configurarea Linux pentru a utiliza setul de instrumente GNU
Pe pagina de descărcare a pachetului găsiți mai multe fișiere de documentație utile în format PDF, inclusiv un ghid detaliat pentru a începe cu pachetul. Instrucțiunile din acest articol sunt o versiune scurtă concepută pentru a vă ajuta să configurați și să executați rapid pachetul.
Dacă programați mult mai mult pentru arhitectura ARM decât pentru arhitectura Intel®, ca alternativă, puteți adăuga linkuri simbolice la directorul / usr / local / bin care indică directorul cu fișierele binare pachet. Apoi, puteți folosi o formă trunchiată de comenzi de rulare, de exemplu, ca în loc de arm-none-linux-gnueabi-as. Lista 2 arată cum se creează legături simbolice similare.
Listing 2. Crearea de legături simbolice pentru instrumentele ARM
Scrieți un program pentru arhitectura ARM
Există o mulțime de linii directoare pentru crearea programelor ARM în limbajul de programare C popular, dar există mult mai puțin programare pe ansamblurile de asamblare pure. Voi rupe această tradiție și voi da un exemplu de scriere a unui program în asamblare pură, ceva care este de obicei considerat programare de magie neagră. Acesta este un program simplu din categoria "Hello World", dar special creat pentru o versiune specifică a ARM Linux.
Notă: În secțiunea Resurse, puteți găsi un link către un articol de la Embedded.com, care vă spune despre programarea ARM nu pentru sistemul Linux, ci pentru hardware-ul propriu-zis.
Listarea 3. Construirea Hello World pentru ARM Linux
După aceasta, creați modulul sursă hw.S și puneți codul afișat în Lista 4 în el.
Lista 4. Hello World pentru ARM Linux
Instrucțiunea svc 0x00000000 instruiește procesorul ARM să sune la "supraveghetorul", care în acest caz este kernel-ul Linux.
Testarea programului pentru ARM
Pachetul Sourcery G ++ Lite pentru nivel scăzut de depanare a programelor disponibile nu pierde GDB popularitate depanator. Acest lucru permite un depanator (printre altele) la distanță de depanare ARM-cod care rulează pe un singur computer de bord conectat la acesta modulul JTAG sau ICE.