Sunteți pe pagina 1din 11

Laborator 2. Medii de dezvoltare software i limbaje de programare pentru aplicaii de timp real. IAR pentru AVR.

Medii de simulare/depanare aplicaii de timp real. (IAR Embedded Workbench pentru AVR) 1. Mediul de dezvoltare IAR Embedded WorkBench. Limbajul C pentru microsisteme. Este folosit pentru dezvoltarea aplicaiilor pentru microcontrolerele din familia ATMEGA printre care se afl i ATMEGA128. Descrierea aplicaiilor se face folosind o versiune a limbajului C standard. Descrierea unei aplicaii se face n primul rnd prin crearea unui spaiu de lucru (la versiunea IAR4.11 care se utilizeaz n laborator). Pentru crearea spaiului de lucru, la deschiderea aplicaiei se acceseaz opiunea Create new project in recent workspace din fereastra de ntmpinare sau din meniu File New Workspace apoi Project Create New Project.

Se d OK la urmtoarea fereastr care apare (Create new project). n continuare se salveaz numele proiectului n directorul ales. La proiectul nou creat se pot aduga fiiere deja create (cu aplicatia MakeAPP de exemplu) sau se pot crea fiiere noi. Pentru adugarea unui fiier deja creat (n cazul nostru cu extensia .c) se acceseaz din meniu Project Add files i se selecteaz fiierele care se doresc adugate. Pentru crearea unui fiier nou se selecteaz din meniu File New File . Noul fiier creat se salveaz cu extensia dorit, n cazul nostru .c. Dup ce se includ fiierele existente sau se va introduce codul surs n fiierele noi se vor face setrile proiectului. Astfel, din meniu se va selecta Project Options avnd grija

ca n stnga, n fereastra Workspace s fie selectat proiectul i nu unul din fiierele componente.

La selectarea Options din Project va fi afiat urmtoarea fereastr:

Aici se pot face toate configuraiile legate de proiect cum ar fi: tipul microcontrolerului folosit, configuraia de memorie, tipul instrumentului de simulare/depanare folosit, tipul fiierului obiect. Se poate observa c exist mai multe categorii de opiuni, afiate n partea stng. Prima din acestea este General option. Aici se vor seta, n tag-ul Target n Processor configuration din lista derualnt cpu = m128 Atmega128 deci tipul care va fi utilizat.

La Memory model se va selecta Small pentru a permite operarea cu memoria RAM intern (salvarea variabilelor declarate global se va face n memoria SRAM intern). O alt setare important o reprezint stabilirea tipului de fiier generat n urma compilrii i realizrii legturilor ntre module. Aceasta se stabilete din categoria de opiuni Linker.

La Format se poate configura ca formatul pentru simulare/depanare (Debug information for CSpy) sau alt format folosit de alte aplicaii (other). O alt setare este aceea a intrumentului folosit pentru testarea i programarea microcontorler-ului. Acesta poate fi un simulator soft sau un instrument hard de programare i testare cu monitorizarea on-line a datelor. Setarea se face accesnd categoria Debugger.

Din Driver se vor selecta tipul instrumentului folosit. 2. Limbajul C pentru microcontrolere din familia AVR Pentru programele descrise n cele ce urmeaz se va folosi o versiune a limbajului C standard cu urmtoarele particulariti: a. Tipuri de variabile Variabilele folosite pot fi de urmtoarele tipuri, fiind declarate folosind sintaxa clasic ntlnit n C sau ntr-o form alternativ conform tabelului de mai jos: C standard Char Unsigned char Int Unsigned int Long Unsigned long Float double Alternativ S8 U8 S16 U16 S32 U32 Numr octei 1 1 2 2 4 4 4 8 Domeniu -127..127 0..255 -32767..32767 0..65535 -2147483647.. 2147483647 0..4294967295 cu virgul (10-5) cu virgul (10-5)

b. Stocare variabile Exist mai multe posibiliti pentru stocarea variabilelor. - stocarea variabilelor n memoria SRAM intern; - stocarea variabilelor n setul de regitrii; - stocarea variabilelor n memoria EEPROM intern (memorie nevolatil). Prima metod se aplic de regul variabilelor globale sau celor locale declarate n funcia main(). Tipul acestora decide dimensiunea alocat automat n memorie iar adresa este stabilit de compilator. A doua metod este aplicat variabilelor locale declarate n interiorul funciilor, parametrilor unei funcii sau valorilor returnate de o funcie. Datorit faptului c spaiul n setul de regitrii este foarte redus, n condiiile ocuprii acestuia compilatorul va proceda la alocarea unor zone suplimentare n memoria RAM intern. De aceea este de dorit evitarea construirii de funcii cu mai mult de doi parametrii sau folosirea excesiv a variabilelor locale. n schimb se poate folosi transmiterea parametrilor prin pointeri sau referin i variabile globale. Datorit limitrilor care sunt prezente n memoria de date (4k la ATMEGA128) se recomand ncadrarea corect a variabilelor n domeniul n care sunt utilizate, folosirea transmiterii parametrilor prin referin sau utilizarea unor variabile temporare declarate global. De asemenea, avnd n vedere faptul c stiva hardware este salvat tot n memoria SRAM intern, se va evita folosirea algoritmilor recursivi.

c. Stocarea constantelor Dac nu se specific altfel, constantele se vor depune tot n memoria SRAM. Pentru optimizarea folosirii acesteia, se poate seta pentru depunerea constantelor n memoria de program punnd declaraia __flash n fa. Aplicaie: Pentru exemplificare vom continua cu paii descrii n laboratorul anterior. S se creeze un proiect la care se adaug fiierul ma_io.c creat cu utilitarul MakeApplication. S se creeze apoi un fiier nou, intitulat main.c. Fiierele librrie generat cu make_application au nevoie de nite modificri pentru a putea fi utilizate n interiorul IAR. Astfel n interiorul fiierelor .c se vor face urmtoarele modificri: - se va comenta (terge) incluziunea usercode.h de la nceputul fiierului; - se vor comenta (terge) urmtoarele macro-funcii care ncep cu: ENTER_MA_..., EXIT_MA_... i INSIDE_MA_... n fiierul main.c se vor scrie urmtoarele: #include ma_io.h //--1 void main( )//--2 { MA_Init_IO( );//--3 MA_WritePort_IO(MA_PORTA,0xff,0xa8);//--4 for(;;);//--5 } --1: are loc incluziunea fiierului .h al librriei. n cazul n care fiierul ma_io.h nu se afl n acelai director cu fiierul main.c trebuie introdus calea complet. --2: aa se declar nceputul programului principal, execuia programului ncepe cu apelul acestuia. --3: este apelat funcia care iniializeaz liniile portului la setrile iniiale configurate cu MakeApplication. --4: este apelat funcie care seteaz toate liniile de ieire ale portului n 1. --5: orice program trebuie s se termine ntr-o bucl infinit. Se include fiierul n proiect, aa cum a fost prezentat mai sus i apoi se realizeaz compilarea.

3. Simularea comportamentului microcontroler-ului folosind IAR Embedded Workbench Dup compilarea programului i corectarea erorilor urmeaz executarea i testarea acestuia. O metod de testare ar fi simularea comportamentului. Pentru aceasta, se selecteaz instrumentul de testare ca fiind simulatorul i se deschide utilitarul de simulare C-Spy integrat n IAR prin selectarea din meniu Project Debug sau apsarea butonului corespunztor din bara cu butoane: La rularea utilitarului de depanare se va afia fereastra de testare/depanare care arat ca n figura de mai jos.

n partea stng a ferestrei este afiat fereastra de dezasamblare n care se poate observa echivalentul n instruciuni asamblare ale comenzilor n C date. La rularea aplicaiei cursorul (verde) este poziionat pe prima instruciune. Pentru rularea programului se pot aciona unul din butoanele tipice pentru mediile de testare i depanare software: Buton Explicaie Reset : cursorul revine la prima instruciune Step over : se execut un pas echivalent cu o instruciune. n cazul n care este un apel de funcie nu va intra n funcie Step into : se execut un pas echivalent cu o instruciune. n cazul n care este un apel de funcie cursorul se va poziiona pe prima instruciune n funcie Step out : se execut un pas echivalent cu o instruciune. n cazul n care cursorul este poziionat ntr-o funcie iese din aceasta i se poziioneaz pe prima instruciune dup

apelul funciei Next statemet: execut urmtoarea instruciune Run to cursor: execut toate instruciunile pn la cursor sau pn ntlnete un break point Go : ruleaz programul pn la ntlnirea unui break point. Cursorul se poziioneaz pe break point Breakpoint : introduce un punct care va suspenda execuia programului cnd va ajunge aici. Stop debugging : oprete testare, revine n mediul IAR Make and debug : compileaz eventualele schimbri fcute la codul surs i reia testarea Pentru vizualizarea datelor rezultate din simulator se selecteaz din meniu View. Aici se pot selecta mai multe date de monitorizat. Pentru monitorizarea memoriei SRAM, a memoriei de program precum i a spaiului IO se selecteaz din meniu opiunea Memory. Se afieaz o fereastr de tipul celei de mai jos:

Pentru afiarea variabilelor precum i a adreselor alocate, se folosete View Watch i se introduc aici variabilele care se doresc prin tragere din codul surs.

Simularea comportamentului unei surse de ntrerupere se face n felul urmtor. Se selecteaz din meniu Simulator Interrupts i se acceseaz o fereastr de tipul celei de mai jos.

Din interrupt se selecteaz sursa de la care poate apare cererea de ntrerupere; Activation time: reprezint timpul de activare n ciclii, dup care va aprea cererea de ntrerupere; Repeat interval: intervalul de timp n care se va repeta apariia ntreruperii Hold time: timpul dat n ciclii, n care ntreruperea rmne activat dac nu a fost tratat; Probability: probabilitatea de apariie a ntreruperii, specificat n procente: Variance: variaia n timp, ca procent din perioada de repetiie a ntreruperii, n care ntreruperea poate apare. De exemplu, dac intervalul de repetiie este setat la 100 o varaiie de 5% poate semnifica faptul c ntreruperea poate aprea aleatoriu ntre o perioad de 95 i 105 pentru a simula o variaie a timpului. Dei simulatorul nu realizeaz o raportare la timpul fizic a programului care se execut el poate fi utilizat pentru testarea funcionalitii modulelor. Aplicaie: Pentru programul scris anterior s se realizeze simularea acestuia. S se parcurg programul afindu-se spaiul IO n care se va observa modificarea strii pinilor. S se afieze variabila parametru Port din interiorul funciei MA_WritePort_IO i s se determine care este adresa care i-a fost alocat.

Probleme rezolvate: 1. Pe pinul PD0/INT0 al unui sistem cu AVRATMega128 este conectat un generator de semnal dreptunghiular. S se realizeze un program care realizeaz numrarea acestor impulsuri. Rezolvare: Se va lucra cu ntreruperi generate extern pe pinul INT0. n subrutina de tratare a ntreruperii se va plasa o variabil care va contoriza aceste impulsuri.

Etape necesare: 1. Configurarea circuitului cu IAR MakeApp pentru generarea de cereri de ntrerupere de la pinul INT0

n urma compilrii sunt generate fiierele ma_intc.c i ma_intc.h. 2. Se construiete un proiect n IAR EW AVR, se include fiierul ma_intc.c n proiect. Se modific fiierul ma_intc.c astfel nct acesta s poat fi compilat cu IAR. Se creeaz un fiier nou care se denumete main.c. n acesta se va scrie urmtorul cod: #include "ma_intc.h" //--1 #include <inavr.h> //--2 unsigned int contor=0;//--3 void main() { MA_Init_INTC();//--4 __enable_interrupt();//--5 for(;;);//--6 } --1: inclus pentru folosirea intreruperii externe --2: inclus pentru apelarea functiei de activare a intreruperilor --3: variabil global n care se va contoriza, iniial are valoarea 0 --4: initializare ntreruperi externe --5: activare lucrul cu ntreruperi --6: bucl principal. n fiierul ma_intc.c se va introduce la nceput declaraia variabilei: extern unsigned int contor; prin care se informeaz compilatorul c se utilizeaz o variabil declarat n alt fiier din proiect (n cazul de fa n main). n interiorul subrutinei de tratare a ntreruperii (funcia MA_IntHandler_INT0_INTC) se va introduce: contor++; prin care se incrementeaz valoarea contorului de impulsuri. 3. Se va compila programul i se va rula simulatorul. Se va selecta simularea generatorului de ntreruperi pentru ntreruperea extern 0, cu o perioad de 100 cicli aa cum se observ n figura de mai jos:

Se va monitoriza valoarea variabilei contor i se va observa poziia acesteia n interiorul memoriei de date. Se va introduce un break point n subrutina de tratare a ntreruperii la contorizarea variabilei. Care pin paralel general IO nu se va mai putea utiliza n cazul folosirii pe post de pin ntrerupere extern? Probleme de rezolvat: 1. S se realizeze un program care s permit contorizarea separat a trei semnale dreptunghiulare. Se vor folosii pinii de ntrerupere INT0, INT1 i INT2. Se vor prezenta variabilele contor monitorizate n paralel. Semnalele externe vor fi generate la frecvene diferite n simulator. 2. Pe pinul PD1/INT1 al unui microcontroler AVRATMega128 se aplic un semnal dreptunghiular periodic cu frecvena fx. S se realizeze un program care s transmit pe pinul PB0 un semnal cu frecvena fx/4 i factor de umplere .

S-ar putea să vă placă și