Produkty Novinky Články Návody Kontakty

Konfigurace projektu v C::B

Aby se nám projekt přeložil a sestavil tak, jak potřebujeme, musíme nastavit parametry pro kompilátor a linker. K tomu přidáme pár příkazů, které se provedou po linkování a z ELF souboru nám vygenerují .bin, případně .hex soubor.
V levém sloupci na záložce Projects v klikneme pravým tlačítkem myši na projekt blink_led. Z kontextového menu vyberem položku Properties... a v zobrazeném dialogu vybereme záložku Build targets (viz obr. 1.11).
obrázek IDE-set-project-targets-screen
Obrázek 1.11 Build targets
Nejdříve upravíme parametry pro generování ladicí (Debug) verze programu. Odstraňte výběr checkboxu Auto-generate filename extension a v položce Output filename změňte příponu .exe na .elf. Nyní vyberte v levém sloupci položku Release a stejnou úpravu proveďte i pro produkční verzi programu. V seznamu Build target files by měly být pro obě verze programu vybrány všechny soubory, které se překladu a linkování účastní. Z vyplněných hodnot je zřejmé, že pro ladicí verzi se object soubory budou ukládat do podadresáře obj\ Debug\ a program bude uložen v adresáři bin\Debug\. Výstupy produkční verze budou uloženy obdobně, object soubory se budou ukládat do podadresáře obj\ Release\ a program bude uložen v adresáři bin\Release\. Tlačítkem OK konfiguraci uložíte.

Parametry kompilátoru a linkeru

Dalším krokem je nastavení parametrů pro kompilátor a linker (obr. 1.12). V levém sloupci na záložce Projects klikneme pravým tlačítkem myši na projekt blink_led. Z kontextového menu vyberem položku Build options... a levém sloupci dialogu vybereme položku blink_led. Budeme nyní nastavovat parametry, které jsou společné pro ladicí i produkční verzi programu.
obrázek IDE-set-project-build-compiler-screen
Obrázek 1.12 Parametry kompilátoru
obrázek IDE-set-project-build-compiler-otherops-screen
Obrázek 1.13 Další parametry
V comboboxu Selected compiler je nastaven CodeSourcery ARM GCC kompilátor. Na záložce Compiler settings je vybrána podzáložka Compiler flags ve které vybereme parametry překladače -Wall, -pedantic a -mthumb. Vybereme vedlejší podzáložku Other options a přidáme další parametry pro překladač -mcpu=cortex-m3 a -std=c99 (obr. 1.13).
Přepneme se do záložky Linker settings a do textového pole Other linker options přidáme dva řádky (obr. 1.14).
​
-T $(LDSCRIPT)
-Map=$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).map 
​
obrázek IDE-set-project-build-linker-screen
Obrázek 1.14 Parametry linkeru
První definuje linkovací skript a druhý generování .map souboru. Obsah proměnné LDSCRIPT nadefinujeme v záložce Custom variables, proměnné TARGET_* jsou interní proměnné Code::Blocks a jsou popsány v dokumentaci programu v sekci 3.2.3 Build targets.
  • proměnná TARGET_OUTPUT_DIR obsahuje název adresáře, kam bude uložen generovaný program
  • proměnná TARGET_OUTPUT_BASENAME obsahuje název generovaného programu bez přípony a cesty
  • proměnná TARGET_OTPUT_FILE obsahuje název generovaného programu
Záložka Search directories umožňuje zadat cesty k adresářům, které sa mají prohledávat při hledání hlavičkových souborů (záložka Compiler) a knihoven (záložka Linker). Protože zatím nebudeme potřebovat žádné knihovní funkce, záložku pro linker vyplňovat nemusíme. Hlavičkové soubory pro kompilátor máme uloženy v podadresáři inc, cestu k němu jsme definovali v globálním nastavení kompilátoru.

Akce před a po sestavení

V záložce Pre/post build steps lze nadefinovat akce, které má IDE provést před sestavením a po sestavení kompilovaného programu. My potřebujeme z vygenerovaného ELF souboru vytvořit .bin, případně .hex soubor pro naprogramování do mikrokontroléru a také si necháme vygenerovat výpis celého programu do .lst souboru. Do textového pole Post-build steps (obr. 1.15) zapíšeme tři řádky
​
$(OBJCOPY) -O binary $(TARGET_OUTPUT_FILE) \
                $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).bin
$(OBJCOPY) -O ihex $(TARGET_OUTPUT_FILE) \
                $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).hex
cmd /c $(OBJDUMP) -S $(TARGET_OUTPUT_FILE) \
                >$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).lst
​
obrázek IDE-set-project-postbuild-screen
Obrázek 1.15 Post-build steps
První dva řádky spouští program arm-none-eabi-objcopy (proměnnou OBJCOPY jsme si nadefinovali v globálním nastavení kompilátoru) a generují .bin respektive .hex soubor. Třetí řádek spouští program arm-none-eabi-objdump (proměnná OBJDUMP je také nadefinována v globálním nastavení kompilátoru) a do .lst souboru generuje disasemblovaný výpis sestaveného programu. Protože používáme přesměrování standardního výstupu programu objdump, musíme program spustit pomocí příkazu cmd /c.
Nakonec si pro ladicí a produkční verzi programu vytvoříme proměnnou LDSCRIPT (obr. 1.16), která bude obsahovat jméno linkovacího skriptu. Proměnou LDSCRIPT jsme použili v nastavení parametrů linkeru. Na záložce Custom variables přidáme novou proměnnou tlačítkem Add. Ve zobrazeném formuláři zadáme do položky Key hodnotu LDSCRIPT a do položky Value zadáme jméno souboru linkovacího skriptu lm3s800.ld. Stiskneme tlačítko OK a proměnná je přidána do seznamu.
obrázek IDE-set-project-custvars-screen
Obrázek 1.16 Uživatelské proměnné projektu
Společná nastavení pro ladicí a produkční verzi programu máme připravena, nyní ještě nastavíme parametry, které budou mít tyto verze odlišné. V našem jednoduchém příkladu to budou pouze parametry kompilátoru pro překlad zdrojových souborů. Pro větší projekty ale může být potřeba odlišně nastavit pro různé verze programu i řadu jiných parametrů.
V levém sloupci zvolíme položku Debug, vybereme záložku Compiler settings a podzáložku Compiler Flags. V comboboxu Policy ponecháme volbu Append target options to project options, námi zvolené parametry budou přidány k parametrům, které jsme nastavili pro celý projekt. Provádíme nastavení pro ladící verzi programu, v okně s checkboxy zvolíme parametr -g, který kompilátoru říká, aby generoval ladící symboly. To je vše co nastavíme speciálně pro ladicí verzi programu.
Nyní v levém sloupci zvolíme položku Release. Na dotaz, zda chceme uložit změny, které jsme provedli pro ladící verzi odpovíme kladně. Zopakujeme stejný postup jako u ladící verze, pro kompilátor ale vybereme jiné parametry. V okně s checkboxy vybereme parametr -Os, který říká kompilátoru, aby provedl optimalizace generovaného kódu s ohledem na výslednou velikost.
Stiskem tlačítka OK uložíme nastavené parametry našeho projektu.

Sestavení projektu

Všechno máme připraveno pro kompilaci a sestavení projektu. Na liště nástrojů v comboboxu Build target vybereme ladící (Debug) nebo provozní (Release) verzi programu.V menu Build vybereme položku Build a spustíme sestavení vybrané verze projektu. V dolním okně Logs & others v záložce Build messages se nám zobrazuje průběh sestavení projektu. Pokud dojde při překladu zdrojového souboru k chybě, IDE v záložce Build messages zobrazí zprávu překladače.
V záložce Build log je zobrazen průběh sestavení celého projektu. Pokud jsme na záložce Other settings, v globálním nastavení kompilátoru, vybrali v comboboxu Compiler logging položku Full command line, zobrazují se nám v okně Build logu celé příkazové řádky. Můžeme zkontrolovat, zda se překlad zdrojových souborů a sestavení programu provádí se správnými parametry přesně podle našich představ. Okno Logs & others můžeme skrýt a znovu zobrazit klávesou F2 nebo z menu View položkou Logs.
Stejný postup zopakujeme i pro druhou verzi (Debug nebo Release) programu. Podíváme se do podadresářů obj\Debug\ respektive obj\Release\, sem se nám ukládají .obj soubory. Do podadresářů bin\Debug\ respektive bin\Release\ se ukládají sestavené programy v ELF formátu blink_led.elf, .bin a .hex verze, disasemblovaný výpis programu blink_led.lst a mapa programu blink_led.map.
Projekt uvedeme do výchozího stavu, tzn. odstraníme produkty překladu (soubory .obj) a linkování (.elf, .bin, .hex., .lst, .map), volbou Clean v menu Build. Výběr položky Rebuild v menu Build provede Clean projektu a následně Build projektu.