ARM a Makefile

Miroslav Mraz mraz na seznam.cz
Sobota Leden 26 21:37:36 CET 2013


Naučit se psát ručně makefile je velmi významné plus, pokud to myslíte s
programováním vážně. Zase to není tak velké drama a jednou napsané
"kopyto" dobře poslouží jak pro jiný projekt, tak i při portování na
jiný typ procesoru. A už vůbec nemluvím o tom, že nejste závislý na
jednom IDE. Třeba to C::B je dobrý kus kódu, ale překlad se nastavuje na
3 různých místech a tak se výsledek může i o dost lišit.
Co se týče knihoven, u jednočipů se snažím vše, co se týče hardware
udržet na úrovni zdrojáků v rámci projektu. Vlastně je pouze důležité si
rozmyslet, kde je ta pofidérní hranice, kde končí obsluha periférií a
začíná můj vlastní výkonný kód. Vždycky musím mít na mysli, že třeba za
rok budu muset použít jiný procesor a mělo by to dát co nejmíň práce.
Takže třeba se nebát používat callback funkce, i když to není zrovna
přehledné.
Někdy se může vyplatit mít v projektu i vlastní (tedy od výrobce čipu)
stdio, math atd. a nepoužívat třeba tu newlib. U jednočipů to bývá
daleko lépe optimalizováno. Nehledě na to, že ta obecná knihovna je
přeložena s nějakými parametry a v projektu se hodí úplně jiné - pak to
vůbec neslinkujete (typicky math funkce ve spolupráci s fpu).
Verzovací systém se taky vyplatí, není na tom nic složitého, používám
SVN a i když na tom dělám sám, někdy se to hodí.

Mrazík


Petr Labaj píše v So 26. 01. 2013 v 20:41 +0100:
>  
> Proc lidi nepouzivaji Makefile? Protoze spousta lidi ani nevi, co to
> je (tim ted zrovna
> nemyslim vzorek lidi z hw.cz, i kdyz i tady se obcas vyskytuji nazory,
> ze je vhodnejsi
> pouzit predchystany example, nez se snazit problemtiku nastudovat).
> Kdyz se podivate do prakticky libovolneho fora o programovani nejakeho
> procesoru,
> tak kazda druha otazka tam je "pod Eclipse to chodi, ale pod mym XYZ
> to nejde".
> Nikdo z nich nepremysli nad tim, ze preklad je veci kompilatoru, tedy
> toolchainu,
> a ze s tim ma barevna klikaci nadstavba IDE spojitost jen okrajovou.
>  
> Konkretne:
> - knihovny prekladam predem a delam z nich jednu knihovnu (*.a)
> - knihovny jsou ulozene v pevne definovanem adresari, ktery je
> spolecny pro
>   vsechny projekty
> - adresar projektu ma shodne jseno s projektem, v nem jsou
> podadresare:
>   - src
>   - include
>   - ld
>   - tmp
> - v adresari projektu je jen Makefile, vystup "projekt.elf" a soubor s
> opisem hlasek
>   z prekladu "projekt.txt", vcetne vypisu o delce code a data
> - v podadresari tmp jsou *.obj, *,lst ke kazdemu modulu, "projekt.map"
> a "projekt.dis",
>   coz je nejkompletnejsi mozny disassembler vysledneho projektu,
> vcetne hexdumpu,
>   tedy veskera informace pro pripadne hledani
> - Makefile ma krome obvykleho "clean" jeste "clean_tmp", ktery maze
> pracovni soubory,
>   ale ponecha "projekt.elf" a "projekt.txt".
>  
> Diky predkompilovanym knihovnam je build projektu velmi rychly.
> Na urovni systemu je pradnastavena volba -j pro paralelni preklad. Mym
> cilem
> vzdy je, aby jedno kolo preklad+link nikdy netrvalo dele nez 2 sekundy
> (na Linuxu, kde
> mi soucasne toolchainy, natr. pro STM32, chodi vyrazne rychleji nez na
> Windows).
> Pokud by to melo u hodne velkeho projektu trvat dele, je treba se
> zamyslet a rozlozit to.
> Knihovny pouzivam jen naprosto minimalne, vetsinu veci si radeji
> napisu sam a vim,
> co a jak tam je. A muzu to snadno preportovat jinam.
> Vyjimkou jsou hodne komplexni periferie jako USB a Ethernet.
> S verzovacimi SW jsem se nikdy neszil (coz povazuji za svou chybu).
> Takze verzovani
> pomoci pojmenovanych *.zip.
>  
> PL
>  





Další informace o konferenci Hw-list