Konfigurace Eclipse
Vytvoříme si a nakonfigurujeme projekt v Eclipse, ve kterém použijeme zdrojové soubory našeho jednoduchého příkladu.
Po opětovném spuštění Eclipse založíme nový projekt příkazem menu File/New/C Project. Vyplníme název projektu do pole Project name (obr. 1.24). V položce Location vidíme, že se v pracovním adresáři automaticky předvyplnil adresář s názvem projektu (obr. 1.24).
V okně Project type je uvedeno několik typů projektů. Rozbalíme složku ARM Cross target application a vybereme prázdný projekt (Empty Project). Tento typ projektu se zde objeví díky instalaci pluginu GNU ARM C/C++ Eclipse. V okně Toolchains je seznam různých typů kompilátorů, které umožňuje tento plugin konfigurovat. My budeme používat CodeSourcery, a proto vybereme toolchain ARM Windows GCC(Sourcery G++ Lite) a dokončíme založení projektu. (obr. 1.25)
Do adresáře projektu nakopírujeme zdrojové soubory z adresářů src a inc, dále skript pro linker lm3s800.ld a konfigurační soubor pro debugger openocd.cfg. Po aktualizaci Project exploreru, což provedeme klávesou F5 nebo příkazem Refresh v kontextovém menu Project exploreru, by se ve stromě projektu měly objevit nakopírované soubory (obr. 1.26).
Abychom úspěšně sestavili projekt, musíme nastavit kompilátor, linker a nástroj pro vytvoření požadovaného formátu obrazu paměti. Konfigurace se provádí v nastavení projektu, které spustíme příkazem menu Project/Properties. Na obrázku (obr. 1.27) vidíme přehled vlastností projektu. Většina položek je přednastavena díky GNU ARM GCC C/C++ pluginu, ale některé je třeba přizpůsobit našemu typu procesoru a našemu projektu.
Nejprve nastavíme cesty k hlavičkovým souborům (obr.1.28). V levé části dialogového okna zvolíme C/C++ General/Paths and Symbols a v detailu v pravé části zvolíme záložku Includes. Cestu přidáme tlačítkem Add. Zatrhneme volbu Is a workspace path, Add to all languages a tlačítkem Workspace vybereme adresář inc projektu. Potvrdíme tlačítkem OK a cesta by se měla objevit v seznamu adresářů Include directories.
Jednotlivé aplikace, které používá CodeSourcery k sestavení projektu, najdeme v konfigurační obrazovce C/C++ Build/Settings/Tool Settings.
Nyní si vysvětlíme a zkontrolujeme důležité položky nastavení kompilátoru. V horní části dialogového okna je aktuálně vybraná konfigurace. (obr. 1.29). Popíšeme si pouze nastavení Debug konfigurace, ale pro konfiguraci Release bude vše stejné. Pokud bude v konfiguraci Release jiná volba, zmíníme to při popisu nastavení dané položky.
Cílový procesor nastavíme ve volbě Tool Settings/Target Processor (obr. 1.30). Vybereme typ procesoru cortex-m3 a zatrhneme položku -mthumb. Tato volba společně s typem procesoru řekne kompilátoru, že má použít instrukční sadu Thumb-2.
Konfiguraci a automatické spuštění přídavných utilit CodeSourcery můžeme nastavit v Tools Setings/Additional Tools (obr. 1.31). Zatrhneme všechny tři volby, protože jsou velmi užitečné. Create Flash Image vytvoří výsledný obraz Flash paměti v požadovaném formátu, Create Extended Listing vygeneruje výpis disassemblovaného kódu programu včetně jeho umístění v paměti a Print Size vypíše souhrn paměťových nároků programu.
V nastavení assembleru Tool Settings/ARM Sourcery Windows GCC Assembler nebudeme nic měnit.
Následuje nastavení kompilátoru Tool Settings/ARM Sourcery Windows GCC C Compiler. Zkontrolujeme, jestli jsou v záložce Directories nastaveny adresáře hlavičkových souborů. Cesty jsou zapsány pomocí proměnných Eclipse ${workspace_loc:/blink-led/inc}.
V zápisu je použita proměnná workspace_loc, což je aktuální umístění pracovního adresáře a proto při přesunu workspace do jiného adresáře nemusíme v nastavení kompilátoru nic měnit.
Položkou Optimizations se řídí optimalizace generovaného kódu. Je to jediné místo, kde se budou konfigurace Debug a Release lišit. Pro konfiguraci Debug vybereme úroveň optimalizace -O0, tedy žádná optimalizace. Pro ladění programu je to vhodné, program je vykonáván přesně podle Céčkového zdrojového kódu (obr. 1.32). V konfiguraci Relesase zvolíme jednu z nabízených úrovní optimalizace -O1 až -O3 nebo -Os. Optimalizace -O1 až -O3 generují rychlejší kód, jeho velikost ale může být větší. Optimalizace -Os se snaží o minimalizaci velikosti výsledného programu. Pro mikrokontroléry se obvykle volí optimalizace -Os, aby se minimalizovaly požadavky na paměť. Podrobný popis parametrů najdeme v dokumentaci k GNU GCC kompilátoru.
Ke konfiguraci linkeru ve volbě Tool Settings/ARM Sourcery Windows GCC C Linker/General přidáme název linkovacího skriptu. Aby bylo připojení linkovacího skriptu nezávislé na umístění projektu, použijeme opět proměnné Eclipse: ${workspace_loc:/${ProjName}/\lm3s800.ld}.
Zbývají doplňkové aplikace, jejichž nastavené hodnoty nebudeme ale měnit. Aplikace Tool Settings/ARM Sourcery Windows GNU Create Flash Image vytvoří obraz paměti ve formátu hex. Pokud bychom chtěli navíc vytvořit i binární obraz, použijeme událost spuštěnou po ukončení sestavení programu. V záložce Build Steps/Post-build steps (obr.1.15) vyplníme pole Command příkazem, který vytvoří binární obraz paměti. K zápisu příkazu použijeme proměnné Eclipse.
Celé předchozí nastavení kompilátoru pomocí GNU ARM C/C++ pluginu má výhodu, že nám automaticky vygeneruje a spustí makefile soubor. Nemusíme proto studovat jednotlivé příkazy make souboru. V poslední fázi spustíme tento make soubor příkazem Project/Build All. V okně Console ve spodní části obrazovky vidíme jednotlivé příkazy, které se spouští, a informace o úspěchu či neúspěchu jejich dokončení.
cs-make --no-print-directory post-build create binary flash image arm-none-eabi-objcopy -O binary blink-led.elf "blink-led.bin" Invoking: ARM Sourcery Windows GNU Create Flash Image arm-none-eabi-objcopy -O ihex blink-led.elf "blink-led.hex" Finished building: blink-led.hex Invoking: ARM Sourcery Windows GNU Create Listing arm-none-eabi-objdump -h -S blink-led.elf > "blink-led.lst" Finished building: blink-led.lst Invoking: ARM Sourcery Windows GNU Print Size arm-none-eabi-size --format=berkeley blink-led.elf text data bss dec hex filename 384 0 0 384 180 blink-led.elf Finished building: blink-led.siz