Kako podesiti pametne telefone i računare. Informativni portal

Code Blocks IDE - postavljanje i korištenje.

Na stranicama "Computer News" više puta sam vam, dragi čitaoci, govorio o različitim razvojnim okruženjima - zgodnim, lijepim, cross-platformskim. Jer, kako god da se kaže, razvojno okruženje je prilično važna stvar i za samog programera i za njegovog poslodavca. Zašto je to važno za programera, mislim, nema potrebe objašnjavati: on u njemu piše kod, a što je zgodnije napisati, to će mu biti lakše raditi. Međutim, kompetentni menadžeri razumiju da je takozvana pogodnost razvojnog okruženja, prije svega, produktivnost zaposlenika koji piše i otklanja greške u programima. Stoga, svaki kompetentan lider zna bez mene da ne vrijedi štedjeti na integriranom razvojnom okruženju (IDE). Međutim, ponekad se javlja želja za uštedom novca. Istina, i to se radi prilično mudro: kupuje se najjeftinija verzija razvojnog okruženja, a instalira se skuplja i, shodno tome, funkcionalnija verzija.

Međutim, nije potrebno štedjeti na takav način, koji se općenito ne može nazvati potpuno legalnim. Možete koristiti besplatni softver umjesto ove prevare sa komercijalnim softverom. Čekaj, ne pljuj! Razumijem, sve što ne liči na voljene osobe Microsoft Visual Studio i/ili Delphi, isprva mnoge nervira, čak i na sam pomen. I za to postoji logično objašnjenje: većina besplatnog softvera za programere (posebno za razvojna okruženja), čak i pri prvom pokretanju, izaziva jedno od dva ne najbolja ljudska osjećaja: ili gađenje ili dosadu. Ponekad - duboko i iskreno sažaljenje. Međutim, imajte na umu, većina toga nije samo softver! Po pravilu, najpoznatiji besplatni i open-source proizvodi zaista zaslužuju pažnju i programera i njihovih vodiča. Dovoljno je prisjetiti se projekata kao što su Eclipse ili Dev-C++. I mnogi drugi također. Zapravo, nije uzalud što se sve više novih učesnika pridružuje pokretu otvorenog koda. Sve više proizvoda koji su nekada bili komercijalni postaju sve popularniji kao besplatni projekti. Iako i oni proizvodi koji su počeli kao open-source, nakon nekog vremena postaju prilično konkurentni u odnosu na svoje komercijalne kolege. Međutim, treba napomenuti da pojam otvorenog koda nije uvijek sinonim za termin "slobodni softver". Iako se, po pravilu, programi otvorenog koda distribuiraju pod licencama koje vam omogućavaju da ih koristite bez ikakvih tantijema programerima.

Razvojno okruženje, sa kojim sada želim da vas upoznam, samo je jedan od onih divnih proizvoda koji izazivaju interesovanje, a ponekad i divljenje. Ovaj program se zove, kao što možete vidjeti iz naslova članka, Code :: Blocks, a na internetu se može naći na www.codeblocks.org. Namijenjen je za razvoj programa koji koriste C / C ++. Veličina preuzimanja zavisi od toga da li ćete preuzeti okruženje sa ili bez kompajlera. Takođe zavisi od toga da li ćete preuzeti izvorni kod IDE-a (a on je dostupan, pošto se Code :: Blocks distribuira pod GNU opštom javnom licencom), ili već kompajlirane datoteke. Općenito, obim preuzimanja varira od tri do trinaest megabajta, što zapravo nije toliko za dobro razvojno okruženje.

Dakle, okruženje je instalirano. Prilikom prvog pokretanja, oko je zadovoljno lijepo izvedenim ekranom dobrodošlice, što obično nije tipično za proizvode besplatnog softvera. Već po tome se može suditi o ozbiljnosti pristupa autora Code :: Blokovi razvoju njihovog potomstva.

Šta je razvojno okruženje spremno da ponudi programeru koji ga koristi? Nije tako malo, posebno u poređenju sa nekim drugim besplatnim IDE-ovima. Prvo, cross-platform. Međutim, ograničen je na dvije platforme: Windows i Linux. Ne mnogo, ali ovo su glavni operativni sistemi na tržištu. Međutim, podrška za neke druge (na primjer, Mac OS X) bi i dalje bila korisna. Lično sam preuzeo verziju za Windows, međutim, sudeći po snimcima ekrana na web stranici programera, pod Linuxom ovaj program ne izgleda ništa lošije.

Drugo, svako može povezati kompajler koji mu/joj najviše voli sa okruženjem. Ili onaj koji je poznatiji za upotrebu. A kompajleri razvojno okruženje podržavaju sledeće: GCC (MinGW za Windows), Microsoft Visual C++ kompajler, Digital Mars, Borland C++ (verzija 5.5), Open Watcom i Sun DCC. Ako ste preuzeli okruženje zajedno sa kompajlerom, onda će to, naravno, biti GCC. Sama okolina prenosi kompajleru sve ključeve potrebne za rad sa datim opcijama. Štaviše, kompilacija se može izvršiti i direktno i kroz make-fajlove, koje Code :: Blocks takođe mogu generisati potpuno nezavisno.

Treće, Code :: Blocks ima zgodan i multifunkcionalni uređivač koda koji podržava isticanje sintakse i preklapanje (preklapanje) blokova koda. Štaviše, okruženje može raditi ne samo s tekstovima u C / C ++, već i sa XML datotekama. Na lijevoj strani prozora programa nalazi se vodič za klase koje se koriste u njegovom tekstu, kao i lista svih korištenih varijabli, konstanti, klasa i imenskih prostora. Tu je i stablo resursa i lista varijabli koje se pregledavaju tokom otklanjanja grešaka. Ono što je lijepo je da svi otvori datoteku u okruženju ima svoju karticu. To je zgodan pristup, i sjajno je što ga sve više i više IDE-ova koristi.

Četvrto, okruženje Code :: Blocks podržava dodatke, odnosno dodatke. Ovo je zaista korisna funkcija i uz nju su programeri implementirali nekoliko stvari koje su zgodne za programera koristeći Code :: Blocks. A glavna od ovih stvari su, naravno, nagovještaji koji se pojavljuju na ekranu dok kucate kod i sadrže liste metoda klasa i parametara metoda ili funkcija. Ova karakteristika je implementirana, po mom mišljenju, ništa lošije nego u mnogim komercijalnim razvojnim okruženjima. Od ostalih dodataka kojima se može pohvaliti stranica projekta Code :: Blocks, čini mi se vrijednim prisjetiti se čarobnjaka za formatiranje koda, čarobnjaka za kreiranje novih klasa, izračunavanja statistike o izvornom kodu projekta i čarobnjaka za ugrađivanje XP Manifesta u resurse projekta . Ako ste, poput mene, preuzeli najveću verziju Code :: Blocks (onu sa kompajlerom), onda već imate sve ove dodatke. Naravno, svako može kreirati sopstveni dodatak za razvojno okruženje. Da biste to učinili, morat ćete preuzeti poseban SDK (Software Development Kit - razvojni komplet softvera) sa lokacije projekta.

Okruženje koristi GNU Debugger kao debugger. Rad s njim praktički se ne razlikuje od rada s debagerima. Microsoft okruženja i Borland. Takođe u okruženju postoji podrška za listu onih stvari koje programer mora da uradi u aplikaciji (to-do list). Može se konfigurirati na način da ako okruženje koristi više programera, za svakog od njih ono će biti vlastito i neovisno o listama drugih programera. Pogodan je i za rad sa projektima u okruženju. Oni su, kao iu Microsoft Visual Studiju, odvojeni od postavki radnog prostora i, što je lepo, i projekti i okruženje radnog prostora mogu da se uvoze iz Visual Studio formata.Uzgred, projekti se mogu uvoziti i iz Dev-C++ formata Istina, ove karakteristike su čisto teoretski opisali sami IDE programeri, a ja ne mogu ništa reći o njima, jer ih nisam isprobao u akciji.

Code :: Blocks ima još jednu važnu karakteristiku koja ga izdvaja od mnogih drugih razvojnih okruženja. Ovo okruženje ima čvrstu integraciju sa bibliotekom wxWidgets, dizajniranom za kreiranje grafičkog korisničkog interfejsa (jednom sam pisao o tome u "Computer News"). Ova biblioteka ima mnoge prednosti i stoga su programeri Code :: Blocks napravili odličan strateški potez, orijentišući svoj proizvod na rad sa ovom divnom bibliotekom. Istina, ovo je implementirano, opet, uz pomoć dodatka koji se zove wxSmith, ali to nisu najvažniji detalji. Dodatak omogućava razvoj sučelja aplikacije u vizualnom modu, što programeri ne mogu a da ne cijene. Posebno oni koji su pokušali da kreiraju interfejs u ne-vizuelnom režimu. Režim uređivanja je sličan onom u Microsoft Visual C++ ili Borland C++ Builder. Sličan dizajner, sličan uređivač za svojstva objekata. S obzirom na višeplatformsku prirodu wxWidgeta i Code :: Blocks, ovo je apsolutno odlična karakteristika.

Pa, evo tako lijepog i korisnog IDE-a koji se zove Code :: Blocks. Možda će mnogi reći da je daleko od Visual Studio-a ili Borland Developer Studio-a, i, naravno, biće u pravu. Nedostaje mu, kao u modernim verzijama ovih komercijalnih okruženja, mogućnost razvoja aplikacija na mnogim jezicima i razvoja za .NET platformu. Međutim, ovo okruženje je mnogo lakše i kompaktnije od čudovišta iz Microsofta i Borlanda. Osim toga, za kreiranje cross-platform aplikacija za Windows i Linux, kombinacija Code :: Blocks i wxWidgets izgleda kao jedna od najboljih opcija među svim mogućim opcijama. Zato nemojte odmah okrenuti leđa besplatnom softveru. Bolje je prvo probati, pa onda odlučiti hoćeš li odbiti ili ne. Uobičajene istine? Možda. Ali što je izjava banalnija, to je jednoj osobi teže doći do nje.

Vadim STANKEVICH

Integrisano razvojno okruženje (IDE) Code :: Blocks (u daljem tekstu CB) je kompletan proizvod za razvoj aplikacija u C/C++. CB je višeplatformski okvir razvijen pomoću biblioteke alata wxWidgets. Postoje verzije okruženja za Windows i druge operativne sisteme (OS) - Linux i Mac OS. Ovaj IDE je potpuno besplatan, otvorenog koda i izgrađen u potpunosti koristeći otvorene tehnologije... Jedan od mnogih snage CB treba da podrži kreiranje wxWidgets aplikacija — odnosno softvera koji koristi OS API za renderovanje grafičkog korisničkog interfejsa (GUI). Drugim riječima, CB vam omogućava da kreirate cross-platform softver za svaki ukus.

CB može raditi sa velika količina kompajleri. Ako ih je nekoliko instalirano u sistemu, možete lako prelaziti između njih, ovisno o vašim potrebama. Osim toga, sam IDE će, u fazi instalacije, skenirati sistem u potrazi za dostupnim kompajlerima i ponuditi korištenje jednog kao glavnog. Moguće je kasnije promijeniti ove postavke i globalno i zasebno za projekte. Za globalne postavke okruženja, postoji čitav odeljak "Podešavanja" u glavnom meniju CB. Da biste postavili bilo koje specifične postavke specifične za određeni projekat, morate otvoriti prozor svojstava projekta. Da biste to uradili, morate nazvati kontekstni meni projekta tako što ćete kliknuti na njega desnim tasterom miša i izabrati stavku "Svojstva". Sami projekti (otvoreni u ovog trenutka u IDE) prikazani su kao stablo u doku "Management", na kartici "Projekti". Sada, u prozoru sa svojstvima koji se otvori, možete konfigurisati širok izbor parametara, od uređivanja ciljeva izgradnje do povezivanja biblioteka trećih strana. Dugme “Opcije izgradnje projekta” na kartici “Postavke projekta” istog prozora sa svojstvima omogućit će vam da vrlo fleksibilno konfigurirate konfiguraciju izgradnje za određeni projekt: ključeve kompajlera, odaberite sam kompajler, povežete biblioteke za povezivač itd. Sve ovo može da se uradi za pojedinačne režime: "Oslobodi" "Otkloni greške".

CB GUI je izgrađen oko plutajućih i rastezljivih dokova koji se mogu spojiti na bilo koju stranu glavnog IDE prozora jednostavnim prevlačenjem i ispuštanjem. Zahvaljujući tome, moguće je vrlo fleksibilno prilagoditi različite izglede sučelja za različite veličine ekran, optimizirajući ergonomiju GUI. Ako postoji nekoliko monitora, zgodno je odvojiti neke panele od glavnog prozora i postaviti ih na susjedne monitore.

Alati za isticanje, dovršavanje koda i uređivanje u CB čine proces rada sa kodom lakim i ugodnim. Ogroman arsenal postavki omogućava vam da vrlo fino prilagodite okruženje "za sebe". Veoma je korisno imati podršku za rad sa varijablama okruženja. Zahvaljujući ovoj funkciji, CB se može vrlo čvrsto integrirati u sistem i proširiti svoje mogućnosti, na primjer, na ovaj način možete povezati wxWidgets biblioteku.

Želim da vam ispričam o svom prvom iskustvu u razvoju igrica. Odmah treba napomenuti da će članak biti čisto tehnički, jer je moj cilj bio samo da steknem vještine u razvoju grafičkih aplikacija koristeći Direct3D, bez uključivanja alata za razvoj igara visokog nivoa poput Unity-a. Shodno tome, neće biti govora ni o implementaciji, monetizaciji i promociji igre. Članak je namijenjen početnicima u programiranju Direct3D aplikacija, kao i jednostavno osobama koje zanimaju ključni mehanizmi rada. slične aplikacije... Takođe, na kraju predstavljam listu literature o razvoju igara, koju sam pažljivo odabrao iz više od stotinu knjiga o programiranju igara i kompjuterskoj grafici.

Uvod

Stoga sam u slobodno vrijeme odlučio istražiti popularni grafički API. Nakon što sam pročitao nekoliko knjiga i analizirao gomilu primjera i tutorijala (uključujući i DirectX SDK), shvatio sam da je došao trenutak kada se isplati okušati se i sami. Glavni problem je bio što većina postojećih primjera jednostavno demonstrira jedno ili drugo API sposobnost i implementirani su proceduralno u gotovo jednu cpp datoteku, pa čak i korištenjem DXUT omotača, i ne daju ideju kakvu strukturu treba imati konačna aplikacija, koje klase treba dizajnirati i kako bi sve to trebalo međusobno komunicirati tako da da je sve lepo, citljivo i efikasno radi. Ovaj nedostatak se također odnosi na knjige o Direct3D-u: na primjer, za mnoge početnike nije očito da stanja renderiranja ne moraju uvijek biti ažurirana prilikom renderiranja svakog okvira, kao i da većina teških operacija (kao što je popunjavanje međumemorije vrhova) ) treba izvršiti samo jednom prilikom inicijalizacije aplikacije (ili prilikom učitavanja nivoa igre).

Ideja

Prije svega, morao sam se odlučiti za samu ideju igre. Odmah mi je pala na pamet jedna stara igra iz 1992. pod MS-DOS-om, koja je, mislim, mnogima poznata. Ovo je logička igra Lines by Gamos.

Pa, izazov je prihvaćen. Evo šta imamo:

  • postoji kvadratno polje ćelija;
  • u ćelijama na terenu se nalaze raznobojne lopte;
  • nakon pomicanja lopte pojavljuju se nove lopte;
  • cilj igrača je da poređa jednobojne loptice u liniju: akumulacija određenog broja jednobojnih loptica u jednoj liniji dovodi do njihove detonacije i dodjele bodova;
  • glavni zadatak je izdržati što je duže moguće dok u polju ne ponestane slobodnih ćelija.
Pogledajmo sada sa stanovišta Direct3D aplikacije:
  • napravit ćemo polje ćelija u obliku trodimenzionalne platforme s izbočinama, svaka ćelija će biti nešto poput podijuma;
  • moraju se implementirati tri vrste animacije lopte:
    1. izgled lopte: prvo se pojavljuje mala lopta, koja za kratko vrijeme naraste do veličine odrasle osobe;
    2. kretanje lopte: samo postoji sekvencijalno kretanje kroz ćelije;
    3. lopta koja odbija: kada mišem odaberete lopticu, ona bi se trebala aktivirati i početi skakati na mjestu;
  • sistem čestica mora biti implementiran da bi se koristio u animaciji eksplozije;
  • Izlaz teksta mora biti implementiran: za prikaz zarađenih poena na ekranu;
  • upravljanje mora biti implementirano virtuelna kamera: rotacija i zum.
U stvari, gore navedene tačke su jadan privid dokumenta koji se zove projektni projekat. Toplo preporučujem da prije početka razvoja sve zapišete do najsitnijih detalja, odštampate i držite pred očima! Gledajući unaprijed, odmah pokazujem demo video radi jasnoće implementacije tačaka (usput, video je snimljen pomoću programa ezvid, tako da nemojte biti uznemireni njihovim splash screenom na početku):

Početak razvoja

Do sada nisam spomenuo koji su alati korišteni. Prvo, potreban vam je DirectX softver razvojni komplet(SDK), uvijek dostupan za besplatno preuzimanje sa Microsoft web stranice: DirectX SDK. Ako ćete koristiti Direct3D 9 verziju, kao ja, onda nakon instalacije trebate otvoriti DirectX Control Panel kroz glavni meni i na kartici Direct3D 9 odabrati koja verzija biblioteka će se koristiti tokom izrade - maloprodajna ili debug (ovo utiče na to da li će Direct3D izvesti program za otklanjanje grešaka o rezultatima njegovih aktivnosti):

Otklanjanje grešaka ili maloprodaja


Zašto Direct3D 9? Jer ovo je najnovija verzija, gdje još uvijek postoji fiksni funkcijski cjevovod, odnosno fiksni grafički cjevovod koji uključuje, na primjer, funkcije za izračunavanje osvjetljenja, obradu vrhova, miješanje i tako dalje. Počevši od verzije 10, programeri se ohrabruju da samostalno implementiraju ove funkcije u shaderima, što jest neosporna prednost, ali, po mom mišljenju, to je teško razumjeti pri prvim eksperimentima sa Direct3D.

Zašto Code :: blokovi? Vjerovatno je bilo glupo koristiti IDE za više platformi za razvoj aplikacije koja koristi ne-cross-platform API. Samo što Code :: blokovi zauzimaju nekoliko puta manje prostora od Visual Studio-a, što se pokazalo veoma relevantnim za moj računar u zemlji.

Ispostavilo se da je početak rada s Direct3D vrlo lak. U Code :: blokovima sam napravio prazan projekat, a onda su dve stvari morale da se urade u opcijama izgradnje:

1) Na kartici direktorija za pretraživanje i podkartici kompajlera, dodajte putanju do direktorija uključivanja DirectX SDK - na primjer, ovako:

Pretražite imenike



2) Na kartici linkera dodajte dvije biblioteke - d3d9.lib i d3dx9.lib:

Linker



Nakon toga u izvorni kod aplikacija će morati uključiti datoteke zaglavlja Direct3D:

#include "d3d9.h" #include "d3dx9.h"

Struktura aplikacije

Ovdje sam napravio svoju prvu grešku: počeo sam razmišljati koji uzorak dizajna odabrati. Došao sam do zaključka da je MVC (model-view-controller) najprikladniji: model će biti klasa igre (igra), koja uključuje svu logiku - izračunavanje putanja kretanja, pojavu loptica, raščlanjivanje eksplozivnih kombinacija; pogled će biti klasa motora odgovorna za prikazivanje i interakciju sa Direct3D; kontroler će biti sam omotač (aplikacija) - ovo uključuje petlju poruka, rukovanje korisničkim unosom i, što je najvažnije, upravitelj stanja i osiguravanje interakcije objekata igre i motora. Čini se da je sve jednostavno i možete početi pisati datoteke zaglavlja, ali to je bilo! U ovoj fazi pokazalo se da je veoma teško navigirati i razumjeti koje metode bi ove klase trebale imati. Jasno je da je došlo do potpunog nedostatka iskustva, pa sam odlučio da pribjegnem savjetu jedne od knjiga: „Ne pokušavajte pisati savršen kod od samog početka, neka bude neoptimalan i neuredan. Razumijevanje dolazi s vremenom, a refaktorisanje se može obaviti kasnije." Kao rezultat, nakon nekoliko iteracija refaktoriranja već radni raspored definicija tri glavne klase imala je oblik:

TGame class

klasa TGame (privatno: BOOL gameOver; TCell * ćelije; WORD * put; WORD pathLen; LONG rezultat; void ClearField (); WORD GetSelected (); WORD GetNeighbors (WORD cellId, WORD * pNeighbors); BOOL CheckPipeDetonate (CORD * pPipe; public: TGame (); ~ TGame (); void New (); BOOL CreateBalls (broj WORD); void Select (WORD cellId); BOOL TryMove (WORD targetCellId); BOOL DetonateTest (); WORD GetNewBallList (TBallInfo ** ppNewList ) WORD GetLastMovePath (WORD ** ppMovePath); WORD GetDetonateList (WORD ** ppDetonateList); LONG GetScore (); BOOL IsGameOver (););


TEngine class

klase TEngine (privatni: HWND hWindow; RECT WinRect; D3DXVECTOR3 CameraPos; LPDIRECT3D9 pD3d; LPDIRECT3DDEVICE9 pDevice; LPDIRECT3DTEXTURE9 pTex; LPD3DXFONT pFont; D3DPRESENT settings_PARAM loptice jumpAnimation; TAnimate * moveAnimation; TAnimate * appearAnimation; LONG rezultat; void initD3D (); void InitGeometry ( ); void InitAnimation (); void DrawPlatform (); void DrawBalls (); void UpdateView (); public: TEngine (HWND hWindow ; ~ TEngine (); void AppearBalls (TBallInfo * ballInfo, WORD count); void MoveBall (WORD * put, WORD pathLen); void DetonateBalls (WORD * detonateList, WORD count); BOOL IsSelected (); BOOL IsMoving (); BOOL IsDetonating (); BOOL IsDetonating (); void OnResetGame (); WORD OnClick (WORD x, WORD y) , BOOL * IsCell); void OnRotateY (INT offset); void OnRotateX (INT offset); void OnZoom (INT zoom); void OnResize (); void OnUpdateScore (LONG rezultat); void Render (); );


TAapplication class

class TApplication (privatno: HINSTANCE hInstance; HWND hWindow; POINT mouseCoords; TEngine * engine; TGame * game; BOOL moveStarted; BOOL detonate Started; BOOL appearStarted; void RegWindow (); statički LRESULT CALLBACK vpminGramcPA vpminGramcPa); javno: TApplication (HINSTANCE hInstance, INT cmdShow); ~ TApplication (); TEngine * GetEngine (); TGame * GetGame (); INT MainLoop ();


Klasa TGame ima samo 3 metode koje korisnik može pokrenuti - New (nova igra), Select (odaberite loptu) i TryMove (pokušaj pomjeranja lopte). Ostali su pomoćni i poziva ih kontrolor u posebnim slučajevima. Na primjer, DetonateTest (test za eksplozivne kombinacije) se poziva nakon pojave novih loptica ili nakon pokušaja kretanja. GetNewBallList, GetLastMovePath, GetDetonateList se pozivaju, respektivno, nakon pojave loptica, nakon pokreta i nakon eksplozije, sa jednom svrhom: da se dobije lista određenih loptica i da je proslijede objektu motora na obradu kako bi nešto nacrtao . Ne želim se detaljnije baviti logikom rada TGame-a, jer postoje izvorni kodovi sa komentarima. Reći ću samo da je definicija putanje kretanja lopte implementirana korištenjem Dijkstrinog algoritma za neusmjereni graf sa jednakim težinama svih ivica.

Pogledajmo bliže klase motora i kontrolera.

TEngine

  • Klasa definira polja za pohranjivanje ručke prozora i njegovog pravokutnika. Koriste se u metodi OnResize koju kontroler poziva kada se promijeni veličina prozora za izračunavanje nove projekcijske matrice.
  • Polje CameraPos pohranjuje koordinate posmatrača u svjetskom prostoru. Nema potrebe za pohranjivanjem vektora pravca gledanja, jer je, po mojoj zamisli, kamera uvijek usmjerena na ishodište koordinata, koje se, inače, poklapa sa centrom platforme.
  • Tu su i pokazivači na Direct3D interfejse: LPDIRECT3D9, koji je potreban samo za kreiranje uređaja; LPDIRECT3DDEVICE9 - u stvari, sam Direct3D uređaj, glavni interfejs sa kojim morate da radite; LPD3DXFONT i LPDIRECT3DTEXTURE9 za rad sa tekstom i teksturom.
  • Polje currentTime se koristi za pohranjivanje trenutnog vremena u milisekundama i potrebno je za renderiranje glatke animacije. Činjenica je da renderiranje svakog kadra traje različit broj milisekundi, tako da morate svaki put mjeriti te milisekunde i koristiti ih kao parametar prilikom interpolacije animacije. Ova metoda je poznata kao vremenska sinhronizacija i koristi se sveprisutno u modernim grafičkim aplikacijama.
  • Pokazivači na TGeometry objekte (cellGeometry i ballGeometry) pohranjuju geometriju jedne ćelije i jedne lopte. Sam objekat TGeometry, kao što naziv implicira, dizajniran je za rad sa geometrijom i sadrži bafere vrhova i indeksa, kao i opis materijala (D3DMATERIAL9). Tokom renderiranja, možemo promijeniti matricu svijeta i pozvati metodu Render objekta TGeometry, koja će renderirati više ćelija ili kuglica.
  • TParticleSystem je klasa sistema čestica koja ima metode za inicijalizaciju mnogih čestica, ažuriranje njihovih pozicija u prostoru i naravno renderiranje.
  • TBall * loptice - niz loptica s informacijama o boji i statusu (odskaču, kreću se, izranjaju).
  • Tri objekta tipa TAnimate - za pružanje animacije. Klasa ima metodu za inicijalizaciju ključnih kadrova, koji su matrice transformacije svijeta, i metode za izračunavanje trenutne pozicije animacije i primjenu transformacije. U rutini renderiranja, objekt motora sekvencijalno prikazuje kuglice i opciono poziva metodu ApplyTransform željene animacije da bi deformirao ili pomjerio loptu.
  • InitD3d, InitGeometry, InitAnimation se pozivaju samo iz TEngine konstruktora i razdvojeni su u zasebne metode radi jasnoće. InitD3d kreira Direct3D uređaj i postavlja sva potrebna stanja renderiranja, uključujući postavljanje točkastog svjetla sa spekularom direktno iznad centra platforme.
  • Tri metode AppearBalls, MoveBall i DetonateBalls pokreću animacije pojavljivanja, kretanja i eksplozije.
  • Metode IsSelected, IsMoving, IsAppearing, IsDetonating se koriste u funkciji upravitelja stanja za praćenje kada se animacija završava.
  • Metode sa prefiksom On poziva kontroler kada se dogode odgovarajući događaji: klikovi mišem, rotacija kamere itd.
Pogledajmo glavnu metodu Rendera:

TEngine :: Render ()

void TEngine :: Render () (// izračunaj koliko je milisekundi prošlo otkako je prethodni okvir nacrtan clock_t elapsed = clock (), deltaTime = elapsed-currentTime; currentTime = elapsed; // ažuriraj pozicije animacije ako su aktivne ako ( jumpAnimation- > IsActive ()) (jumpAnimation-> UpdatePosition (deltaTime);) if (appearAnimation-> IsActive ()) (appearAnimation-> UpdatePosition (deltaTime);) if (moveAnimation-> IsActive ()) (moveAnimation-> UpdatePosition (deltaTime );) pDevice-> Clear (0, NULL, D3DCLEAR_STENCIL | D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB (0,0,0), 1.0f, 0); pDevice-> BeginScene (); // nacrtaj platformu () DrawPlat ; nacrtajte kuglice DrawBalls (); // ako je sistem čestica aktivan, ažurirajte položaje čestica i renderirajte ih teksturom if (psystem-> IsActive ()) (pDevice-> SetTexture (0, pTex); psystem -> Ažuriraj (deltaTime); psystem-> Render (); pDevice-> SetTexture (0,0);) // prikaz zarađenih bodova char buf = "Score:", tmp; itoa (score, tmp, 10); strcat (buf, tmp);RECT fontRect; fontRect.left = 0; fontRect.right = GetSystemMetrics (SM_CXSCREEN); fontRect.top = 0; fontRect.bottom = 40; pFont-> DrawText (NULL, _T (buf), - 1, & fontRect, DT_CENTER, D3DCOLOR_XRGB (0,255,255)); pDevice-> EndScene (); pDevice-> Present (NULL, NULL, NULL, NULL); )


Na samom početku izračunava koliko je milisekundi prošlo od prethodnog poziva Render (), a zatim se ažurira napredak animacije, ako je aktivan. Baferi se brišu metodom Clear i platforma, kuglice i sistem čestica se uzastopno izvlače, ako je aktivan. Na kraju se prikazuje linija sa trenutnom vrijednošću zarađenih bodova.

TApplication

  • Klasa ima polje za pohranjivanje koordinata miša, jer ćemo morati izračunati relativne vrijednosti pomaka kursora da bismo rotirali kameru.
  • Za praćenje statusa odgovarajućih animacija potrebni su logički parametri appearStarted, moveStarted i detonateStarted.
  • Metoda RegWindow sadrži kod za registraciju klase prozora.
  • Statička metoda MsgProc je takozvana prozorska procedura.
  • ProcessGame je pojednostavljena verzija upravitelja stanja, koja procjenjuje trenutno stanje igre i poduzima neke radnje ovisno o tome.
  • MainLoop - petlja poruka.
Evo jednog laganog kontrolera. Slična petlja poruka može se naći u bilo kojoj Direct3D knjizi:

TApplication :: MainLoop ()

INT TApplication :: MainLoop () (MSG msg; ZeroMemory (& msg, sizeof (MSG)); dok (msg.message! = WM_QUIT) (if (PeekMessage (& msg, NULL, 0,0, PM_REMOVE)) (TranslateMessage (& msg ); DispatchMessage (& msg);) else (// ako nema poruka, obraditi stanje igre i renderirati ProcessGame (); engine-> Render ();)) return (INT) msg.wParam; )


Jedina stvar koja zaslužuje pažnju je ono što se nalazi unutar else bloka - to je takozvana IdleFunction, koja se izvršava u nedostatku poruka.

A evo i funkcije državnog menadžera:

TApplication :: ProcessGame ()

void TApplication :: ProcessGame () (if (moveStarted) (// sačekajte dok se animacija pokreta ne završi if (! engine-> IsMoving ()) (// kretanje je preko - test za eksploziju moveStarted = FALSE; if (game->) DetonateTest ( )) (// inicira eksploziju i povećava poene WORD * detonateList, count = game-> GetDetonateList (& detonateList); detonateStarted = TRUE; engine-> DetonateBalls (detonateList, count); engine-> OnUpdateScore (game-> GetScore ()) ;) else (// inače pokušavamo dodati lopte if (game-> CreateBalls (APPEAR_COUNT)) (TBallInfo * appearList; WORD count = game-> GetNewBallList (& appearList); appearStarted = TRUE; engine-> AppearBalls (appearList, count); ) else (// igra je gotova!)))) if (appearStarted) (// sačekajte dok se animacija ne završi if (! engine-> IsAppearing ()) (appearStarted = FALSE; // izgled je gotovo - testirajte eksploziju za svaki slučaj ako (igra-> DetonateTest ()) (// pokrenite eksploziju i povećajte bodove WORD * detonateList, count = game-> GetDetonateList (& detonateList); det onateStarted = TRUE; motor-> DetonateBalls (detonateList, count); engine-> OnUpdateScore (igra-> GetScore ()); ))) if (detonateStarted) (// sačekajte dok se animacija eksplozije ne završi if (! engine-> IsDetonating ()) (// samo resetirajte zastavicu detonateStarted = FALSE;)))


Pa, možda je to sve!

Nadam se da će moje istraživanje nekome koristiti. Usput, izvori su na githubu.

Hvala vam na pažnji!

Obećana literatura

1. Frank D. Luna Uvod u programiranje 3D igara sa DirectX 9.0 - za razumijevanje osnova;
2. Gornakov S. Lekcije DirectX9 programiranja u C++ - također osnove, ali postoje poglavlja o DirectInputu, DirectSoundu i DirectMusic-u. Greške se ponekad javljaju u primjerima programa;
3. Flenov ME DirectX i C ++ umjetnost programiranja - smiješan stil prezentacije. U osnovi, svrha knjige je kreiranje animacija koristeći zanimljivi efekti, uključujući shadere. Procijenite sami po naslovima sekcija: srčani udar, vatreni zmaj;
4. Barron Todd Programiranje strateških igara sa DirectX 9 - potpuno posvećeno temama vezanim za strateške igre: blok grafika, AI, kreiranje mapa i pejzaža, spriteovi, specijalni efekti sa sistemima čestica, kao i razvoj interfejsa ekrana i rad sa DirectSound-om/muzikom ;
5. Bill Fleming 3D Creature WorkShop - knjiga ne o programiranju, već o razvoju trodimenzionalnih modela likova u LightWaveu, 3D Studio Max, Animation Master;
6. Thorn Alan DirectX 9 Korisnički interfejs Dizajn i implementacija - detaljna knjiga o razvoju grafički interfejsi sa DirectX-om. Razmatra se hijerarhijski model komponenti ekranske forme, sličan onom koji je implementiran u Delphiju;
7. Adams Jim Advanced Animation with DirectX - raspravlja o tipovima animacije (skeletne, morfing i varijeteti) i njihovoj implementaciji, kao io radu sa geometrijom i animacijom iz X-fajlova;
8. Lamotte Andre Programiranje igara za Windows. Stručni savjeti - ova knjiga je već ozbiljnija: govori o pitanjima optimizacije, izboru struktura podataka za različite zadatke, višenitnosti, fizičko modeliranje, AI. Posljednje poglavlje opisuje kako napraviti igru ​​o svemirski brod i vanzemaljci;
9. David H. Eberly 3D Game engine dizajn je dobra knjiga za razumijevanje cjelokupne teorije razvoja igara: prvo opisuje grafičke API tehnologije (transformacije, rasterizacija, sjenčanje, blendanje, multiteksturiranje, magla, itd.), zatim teme kao što su graf scene, izbor objekata, detekcija sudara, animacija likova, nivo detalja, pejzaži;
10. Daniel Sánchez-Crespo Dalmau Osnovne tehnike i algoritmi u programiranju igara - detaljno raspravlja o algoritmima i strukturama podataka koji se koriste u zadacima razvoja igara, kao što su AI, skriptiranje, renderiranje u zatvorenim i otvorenim prostorima, algoritmi izrezivanja, proceduralne tehnike, načini implementacija senki, implementacija kamere, itd.;
11. Lamotte André Programiranje igara uloga sa DirectX 9 - hiljada stranica detaljan priručnik o razvoju RPG-a. Uključuje oba teorijska poglavlja o programiranju sa Direct3D, DirectInput, DirectSound, DirectPlay i primijenjena poglavlja koja se direktno odnose na motor igre.

Oznake: Dodaj oznake

Dobar dan dragi prijatelji. Ovim člankom započinjem seriju lekcija posvećenih jednom od najpopularnijih programskih jezika - C++. Lekcije su prvenstveno namijenjene korisnicima koji nisu upoznati sa programiranjem, dakle profesionalcima, nemojte biti strogi, iako podržavam kritike, posebno na moje obraćanje. U svojim lekcijama koristiću razvojno okruženje Code :: Blocks koje se može besplatno preuzeti i koristiti. Počnimo, naravno, s klasičnim Hello, world =)

Nadam se da ste već preuzeli i instalirali Code :: Blocks, ako jeste, hajde da počnemo. Pokretanje razvojnog okruženja

Prije svega, kreirajte novi prazan projekt File-> New-> Project i odaberite Empty project

kliknite Idi, a zatim Sljedeće


i u prozoru koji se pojavi, u polje Naslov projekta upišite naslov projekta, u Naziv datoteke projekta naziv projekta i ponovo Dalje.


U sljedećem prozoru izbrišite direktorij Objects iz konfiguracije Create "Debug" i Create "Release" konfiguracije, kao što je prikazano na slici iznad i kliknite na dugme Finish. Desno bi se trebao pojaviti projekat pod nazivom "Hello world".

Sljedeći korak, dodajte datoteku File-> New-> FIle ... u projekt i odaberite c / c ++ izvor u prozoru koji se pojavi.

Idite ponovo, Next, odaberite C++, Next i pogledajte sljedeći prozor

,

ovdje treba navesti ime datoteke (nazvao sam je main) i njenu putanju, po mogućnosti mapu sa projektom. Označite okvire Otklanjanje grešaka i Izdavanje i kliknite na Završi.

I dobili smo praznu C++ datoteku u koju ćemo napisati sam programski kod.

Sada počinjemo pisati sam programski kod. Za prikaz informacija na ekranu potrebna nam je iostream I/O biblioteka.

#include

korištenje imenskog prostora std;

Onda pišemo glavna funkcija koji će se izvršiti kada se program pokrene

int main ()

mora se nazvati "main" i specificirati mu tip int (o tome ćemo govoriti u narednim lekcijama). Između kovrčave zagrade i programski kod će biti pronađen. Napisaćemo jednostavan program koji ispisuje pozdrav "Zdravo, svet!" na konzolu.

cout<<"Zdravo svijete!" ;

Nakon svake naredbe potrebno je staviti ";", ovo govori kompajleru da je naredba gotova i da se sljedeća može obraditi. cout - Ispisuje vrijednosti varijabli ili nizova u komandnu liniju.

Kompletan popis programa.

#include

korištenje imenskog prostora std;

int main ()

cout<< "Hello, world!" ;

povratak 0 ;

Pokrećemo projekat i vidimo rezultat.


U nastavku prilažem video tutorijal ovom članku.

Ako imate bilo kakvih pitanja, molimo napišite svoje komentare na Ova adresa el. pošte je zaštićena od spambotova. Trebate omogućiti JavaScript da biste ga vidjeli. ,">Ova adresa el. pošte je zaštićena od spambotova. Trebate omogućiti JavaScript da biste ga vidjeli., završiću lekcije ili samo pomoći u proučavanju gradiva.

  • < Назад

Razvoj aplikacija za ugrađene uređaje

Dio 2. Korištenje koda :: Blokovi za razvoj AVR aplikacija

Serija sadržaja:

U prethodnom članku smo opisali kako koristiti Eclipse IDE za kreiranje aplikacija za Atmel AVR seriju mikroprocesora koristeći GNU AVR GCC kompajlerski komplet. Pokrio je konfigurisanje Eclipse-a pomoću AVR dodatka, kao i ručno konfigurisanje okruženja. Sada ćemo pokazati kako se isti problem može riješiti korištenjem drugog, lakšeg i vrlo pogodnog razvojnog okruženja Code :: Blocks.

Upoznavanje okoline

Kreiranje projekta

Ako u radnom prostoru još nisu kreirani projekti, tada je nakon pokretanja Code :: Blocks na centralnom panelu aktivna samo kartica "Počni ovdje". Da biste kreirali novi projekat, izaberite naredbu "Kreiraj novi projekat" ili stavku menija "Datoteka->Novi->Projekat". U svakom slučaju, otvoriće se prozor za izbor šablona za budući projekat u kojem odredimo šablon "AVR Project" i pritisnemo dugme "Idi".

Pojavit će se prozor dobrodošlice AVR projektnog čarobnjaka. Kliknite na dugme Dalje i u dijaloški okvir koji se otvori unesite naziv projekta i direktorij u kojem će se nalaziti. Na osnovu ovih podataka, program će automatski ponuditi korisniku ime projektne datoteke sa * .cbp ekstenzijom i direktorij projekta koji će biti kreiran. Zatim treba da pritisnete dugme "Dalje".

Sljedeći prozor traži od vas da odaberete konfiguracije izgradnje koje će se koristiti u projektu. Prema zadanim postavkama, obje su konfiguracije aktivne: Otklanjanje grešaka i Release. Kompajler "GNU AVR GCC Compiler" je unapred određen. Također ovdje možete promijeniti zadane direktorije za kompajlirane konfiguracijske datoteke.

U sledećem prozoru označavamo tip ciljnog procesora tako što ga biramo sa padajuće liste (kasnije se to može uraditi u parametrima kompilacije). Ako projekt koristi vanjsku memoriju, trebali biste navesti njene parametre. Zatim biste trebali postaviti vrijednost globalne varijable projekta F_CPU, specificirajući frekvenciju takta procesora u hercima. Podrazumevano je omogućeno kreiranje datoteke mape simbola (.map) i heksadecimalnih datoteka, kao i datoteke sa listingom disassemblera (.lss). Također je korisno omogućiti parametar "Run avr-size after build" - tada će se na kraju dnevnika izgradnje projekta pojaviti informacije o tome koliko prostora će biti zauzeto u programskoj memoriji iu ram memorija... Iz nekog razloga, omogućavanje opcije kreiranja liste nema efekta na kreiranje projekta i morate ručno dodati odgovarajuću naredbu u korake prije/poslije izgradnje. Kliknite na dugme Završi (slika 2).


Projekat je kreiran, a prvi fajl mu se automatski dodaje - main.c.

Postavljanje projektnog i razvojnog okruženja

Ako je projekat kreiran pomoću predloška AVR projekta, tada možete početi s programiranjem gotovo odmah. Međutim, proći ćemo kroz glavne parametre kako bismo bili sigurni da je sve ispravno konfigurirano.

  1. Odaberite stavku menija "Projekt-> Opcije izgradnje". Otvoriće se prozor postavki parametara izgradnje (slika 3). Lijevo okno sadrži ciljno stablo izgradnje. Na najvišem nivou, postoje postavke izgradnje za cijeli projekat. Najprikladnije je prvo odrediti parametre za cijeli projekat, a tek onda dodati nešto u pojedinačne opcije izgradnje.

    Prije svega, morate biti sigurni da je “GNU AVR GCC Compiler” odabran u polju “Selected Compiler”. Ispod, na kartici "Zastavice kompajlera", nalaze se zastavice kompajlera. Po defaultu, korisna zastavica "Omogući sva upozorenja kompajlera" je već omogućena ovdje. Također je vrijedno osigurati da smo odabrali ispravan tip procesora za koji se projekt razvija.

    Kartica #defines prikazuje vrijednost varijable F_CPU, ako je postavljena kada je projekat kreiran.

    Na kartici “Opcije povezivača” u panelu “Ostale opcije povezivanja” možete vidjeti da je linker postavljen na ispravan parametar -mmcu, a u lijevom panelu “Biblioteke linkova” morate navesti biblioteke potrebne za projekat, ako ga ima.

    Idite na karticu "Traži imenike". Ispod, na kartici Compiler, trebate umetnuti putanju do datoteka zaglavlja, na primjer, /usr / avr / include /. Da biste to učinili, koristite dugme "Dodaj" i unesite ispravnu putanju. Slično, na kartici "Linker" navedite putanju do AVR GCC biblioteka, na primjer, / usr / avr / lib.

    Kartica koraka prije/poslije izgradnje. U polju "Post-build steps" možete vidjeti komande za pokretanje uslužnih programa avr-size, avr-objcopy, avr-objdump. Na primjer, da bismo dobili listing (pošto omogućavanje parametra "Kreiraj proširenu datoteku sa listingom" u čarobnjaku za novi projekat ne proizvodi željeni efekat, barem u verziji 8.02) dodajemo sljedeću naredbu:

    avr-objdump -h -S $ (TARGET_OUTPUT_FILE)> $ (TARGET_OUTPUT_FILE) .lss

    Ako se sada prebacite s parametara cijelog projekta na preciznije ciljeve izgradnje, na primjer, Debug ili Release, tada možete napraviti neke promjene u parametrima izgradnje. Međutim, imajte na umu da je parametar "Politika" postao dostupan. Njegova zadana vrijednost je "Append target options to project options", tj. opći parametri projekta se dodaju parametrima za određeni cilj izgradnje. Postoje i druge opcije za kombinovanje postavki različitih nivoa. Ovo vam omogućava fleksibilno prilagođavanje projekta bez ponavljanja već unesenih općih parametara.

    Podrazumevane postavke su da se automatski omogući kreiranje informacija za otklanjanje grešaka u cilju za otklanjanje grešaka (parametar "-g") i optimizuju veličinu rezultirajućeg programa u cilju izdavanja (parametar "-Os").

  2. Odaberite stavku menija "Projekt-> Svojstva". Ovdje su standardne postavke sasvim prikladne za početak rada s projektom bez promjene bilo čega u njima. Vrijedi obratiti pažnju na karticu "Izgradnja ciljeva". Za svaki cilj izgradnje (podrazumevano: Debug and Release), naznačeno je gde se upisuju rezultujuće objektne datoteke, a u polju "Build target files" možete odrediti koje izvorne datoteke su uključene u ovu izgradnju (slika 4).

    Ako želite, možete spremiti svoj prilagođeni projekt kao predložak za buduće projekte. Da biste to uradili, izaberite naredbu menija "Datoteka-> Sačuvaj projekat kao korisnički šablon..." i unesite naziv šablona. Kasnije, prilikom kreiranja novog projekta, možete odabrati željeni predložak u kategoriji "Korisnički predlošci" (slika 5). Nakon toga morate postaviti prazan direktorij u kojem će se kreirati novi projekt, a zatim urediti naziv projekta.


    Možete čak i modificirati postojeći standardni predložak. Da biste to učinili, u prozoru za odabir šablona kliknite desnim tasterom miša na traženi predložak i koristite opciju "Uredi ovu skriptu" u meniju koji se pojavi.

  3. Prije nego što napravite bilo što, još uvijek morate pogledati globalne postavke kompajlera. Ovo se radi kroz glavni meni: "Postavke-> Postavke kompajlera i debagera". U prozoru lijevog okna koji se otvori kliknite na ikonu "Globalne postavke kompajlera". Na samom vrhu desnog okna, u gornjem polju "Selected compiler", izaberite "GNU AVR GCC compiler" (slika 6).

    Teško da se isplati bilo što mijenjati na kartici "Postavke kompajlera": ovi parametri će postati standardni za sve AVR projekte. Ali na karticama "Pretraži direktorije-> Kompajler" i "Pretraži direktorije-> Linker" u mom slučaju već su postojale standardne staze /usr/include i /usr/lib, respektivno, što je bilo pogrešno. Ovdje možete specificirati ispravne putanje (na primjer, /usr / avr / include i /usr / avr / lib), i izbrisati iste putanje u postavkama projekta, ja sam samo počistio ova polja pomoću dugmadi "Obriši", jer parametri projekta do ovog trenutka su već konfigurisani.

    Na kartici "Toolchain executables" provjeravamo da li su nazivi izvršnih datoteka iz AVR GCC paketa i putanje do njih ispravno navedeni. Koristeći dugme "autodetect", možete pokušati automatski otkriti sve ove vrijednosti. Ako je nešto pošlo po zlu (na primjer, AVR GCC distribucija je završila s egzotičnim imenima i direktorijima za smještaj), onda je ovo samo mjesto gdje možete sve popraviti ručno. Na slici 7, polje "Instalacioni direktorij kompajlera" mora biti "/usr" ako se AVR GCC programi nalaze u /usr /avr / direktoriju.


    I poslednja stvar. Na kartici "Ostala podešavanja" nalazi se polje "Zapis kompajlera". Ovdje možete postaviti način evidentiranja procesa kompilacije. Preporučljivo je ovdje postaviti vrijednost "Puna komandna linija". Ovo će vam omogućiti da detaljno pratite komande koje se koriste tokom sklapanja.

Sada Code :: Blocks je spreman za izgradnju vašeg projekta!

Korištenje vlastitog makefilea za svoj projekat

Uvijek može doći do nestandardne situacije kada trebate preuzeti potpunu kontrolu nad procesom izgradnje projekta. Da biste to učinili, Code :: Blocks pruža mogućnost rada sa vašim vlastitim montažnim fajlom. Da biste ga koristili, morate kreirati prazan projekat i sačuvati ga. Sada morate naznačiti da koristite svoj makefile:

  1. Odaberite stavku menija "Projekat -> Svojstva".
  2. Idite na karticu "Postavke projekta".
  3. Označite okvir "Ovo je prilagođeni makefile".
  4. Provjerite je li ispravno ime datoteke navedeno u polju "Makefile:".
  5. Sada, na kartici "Build targets", morate promijeniti ili dodati ciljeve izgradnje u skladu s postojećim makefileom, na primjer: all cleanall

Kada koristite sopstveni makefile, trebalo bi da proverite koje su komande dostupne na kartici "Napravi komande" u stavci menija "Projekat -> Opcije izgradnje".

Probni program

Projekat kreiran korišćenjem AVR šablona već sadrži main.c fajl koji sadrži pripremu glavnog modula za program C. Napišimo novi C++ program.

Koristite opciju menija "Datoteka-> Novo-> Datoteka ...", odaberite "C ++ izvor" i kliknite na dugme "Idi". Pojavit će se prozor dobrodošlice novog čarobnjaka. izvorni fajl... Kliknite na dugme "Dalje" i u sledećem prozoru izaberite programski jezik za ovu datoteku: C ++. Zatim navedite naziv datoteke (na primjer, sample.cpp) i punu putanju do ove datoteke, za koju kliknite na dugme "..." desno od polja za naziv datoteke. Zatim morate naznačiti za koje će svrhe sklopa ova datoteka biti prisutna, za koju možete jednostavno kliknuti na dugme "Sve". Kliknite na dugme Završi.

U kreiranu praznu datoteku unesite najjednostavniji C ++ program:

int main (void) (const int some_size = 1000; dok (true) (za (int i = 0; i< some_size; i++) int a = 3; // какое-нибудь действие } return 0; // никогда не дойдет сюда }

Sačuvajte datoteku pritiskom na Ctrl + S. Fajl main.c nam nije potreban, on se može ukloniti iz projekta desnim klikom na njegovo ime i odabirom naredbe „Ukloni datoteku iz projekta“ iz menija koji se pojavi (slika 8).


Prilikom unosa komentara na ruskom, povremeno sam nailazio na dosadnu grešku u radu urednika: ponekad odbija da unese ćirilično pismo. Očigledno je to zbog rada u Unicode-u. Problem možete privremeno riješiti unošenjem dodatnog razmaka, nakon čega se tekst piše normalno. Ovaj prostor se tada može ukloniti.

Hajde da kompajliramo program. Da biste to učinili, odaberite naredbu izbornika "Build-> Build" ili pritisnite poznatu kombinaciju tipki Ctrl + F9, možete koristiti i plavo dugme zupčanika na traci s alatima. Program će biti kompajliran, a okvir s porukom na dnu ekrana automatski će se prebaciti na karticu "Build messages", gdje će pisati da je gradnja završena, da ima 0 grešaka i jedno upozorenje: u redu 8, neiskorišteno varijabla "a".

Malo o otklanjanju grešaka

Pristup otklanjanju grešaka u AVR aplikacijama u velikoj meri zavisi od hardvera koji se koristi. Ako imate AVR JTAG ICE uređaj, možete izvršiti otklanjanje grešaka u krugu tako što ćete ga povezati na procesor pomoću uslužnog programa avarice. Ako ne postoji takav uređaj, koristite simulator simulavr procesora. Nažalost, ovaj projekat nije razvijen već nekoliko godina, ali programeri nastavljaju da objavljuju popravke.

Da biste podesili otklanjanje grešaka u Code :: Blocks, morate otvoriti svojstva projekta "Projekt-> Svojstva" i otići na karticu "Debugger". Ovdje, u polju "Odaberi cilj", odaberite "Debug". Za ovu konfiguraciju, na kartici "Udaljena veza" navedeni su parametri za povezivanje avr-gdb sa udaljenim ciljem za otklanjanje grešaka:

  • "Vrsta veze": TCP.
  • "IP adresa": lokalni host ako je uređaj za otklanjanje grešaka (ili simulator) povezan na isti računar.
  • "Luka": na primjer, 1212.

Sada na kartici "Dodatne naredbe" u polju "Nakon povezivanja" trebate unijeti sljedeće naredbe za debugger:

glavni prekid opterećenja

Prva komanda će učitati program u cilj za otklanjanje grešaka (mikroprocesor ili simulator), a druga će umetnuti tačku prekida u glavnu funkciju.

Prije otklanjanja grešaka, morate pokrenuti simulavr u terminalu:

simulavr -g -p 1212 -d atmega128

(za procesor atmega128), dobijate nešto ovako:

$ simulavr -g -p 1212 -d atmega128 Simulacija atmega128 uređaja. ... main.c: 415: PORUKA: Simulacija frekvencije takta od 8.000.000 Hz Čeka se port 1212 da se gdb klijent poveže ...

Ako je uređaj povezan na serijski port / dev / ttyS0, srebroljublje možete pokrenuti sljedećom naredbom:

srebroljublje -j / dev / ttyS0 -P atmega128: 1212

Sada možete započeti otklanjanje grešaka u Code :: Blockovima koristeći komandu menija "Debug-> Start". U prozoru u kojem je pokrenut simulavr biće dodane poruke poput sljedeće:

Veza je otvorila host 127.0.0.1, port -14999. dekoder.c: 737: PORUKA: PRELOMNA TAČKA: PC = 0x00000068: sat = 34

Ovo će učitati izvorni tekst koji sadrži glavnu funkciju u uređivaču Code :: Blocks, a kursor za otklanjanje grešaka će se zaustaviti na ovoj funkciji, kao što je prikazano na slici 9. Sada možete koristiti prikladna dugmad da kontrolišete debuger na traci sa alatkama, pogledajte vrijednosti varijabli i tako dalje.... Za više informacija o otklanjanju grešaka, pogledajte dokumentaciju za gdb, simulavr ili avarice.


Zaključak

Dakle, ispričali smo kako, utrošivši minimalno truda i vremena, bez pozivanja na dokumentaciju i priručnike, brzo započeti razvoj AVR aplikacija koristeći divno i brzo razvijajuće okruženje za razvoj Code :: Blocks. Trenutno je sučelje okruženja prevedeno na mnoge jezike i, moguće, lokalizirane datoteke će uskoro postati dio glavne razvojne grane.

U sljedećem članku ćemo se upoznati s korištenjem Eclipsea za izgradnju aplikacija za širok spektar mikroprocesora s malom količinom RAM-a, za koje je dizajniran SDCC kompajler otvorenog koda.

Top srodni članci