C Compilery

Už jsem napsal pár řádků v assambleru pro 8051. A taky jsem něco málo naprogramoval i v C i tu mně napadlo zkusit ony kompilery C pro jednočip třeba 8051. Přiznám se, že jsem mněl docela nízké mínění o C kompilerech o to jsem byl víc překvapen kvalitou kodu třeba Keilu, ale i SDCC mně dost překvapil. Zde bych udělal svůj rozbor.

Například na www.hw.cz bylo už hodně napsaného jaký je rozdíl při vývoji aplikace mezi ASM a C. Tak doporučuji zasurfovat na jejich stránky a přečíst si to. Já jsem si oblíbil dva fešáky SDCC a uVision od firmy Keil.

 

SDCC

Je to kompiler C šířený pod licencí GNU. Pokud vás zajímají podporované platformy tak jsou to např. 8051, DS390, AVR, PIC aj. Některé platformy jsou v různém stádiu rozpracovanosti a vzhledem k tomu, že se tohle dílko dost dynamicky rozvijí tak se situace také rychle mění. No při pohledu na zdrojové kody knihoven SDCC bych řekl, že platforma 8051 je asi na tom "nejlépe". Co byste u SDCC hledaly marně je:

IDE (neboli prostředí) to zoufale chybí, i když existují alternativy, ale nějak to prostě není ono. Narazil jsem na jeden projekt a ten vypadal hodně dobře, ale bohužel čínsky moc neumím J, ale pokud se autor rozhodne jej přeložit do angličtiny byla by to bomba. Jinak existuje hodně možností free nebo dokonce i komerční IDE, ale já osobně používám třeba IDE od firmy cygnal (www.cygnal.com) (častěji ale poznámkový blok) je sice primárně určeno pro Keil, ale po malých úpravách se dá použít i pro SDCC. Šikovná je i Enigma od MicroIDE. Jeden český autor udělal pěkné prostředí v Delphi, ale nedokončil jej. Rád bych v tom pokračoval, ale Pascal není nic pro mě. Takže pokud někdo má něco zajímavého a použitelného nechť se nám ozve (pokud by to bylo v C tak bych byl ještě radši a pomohl bych mu).

Optimalizace - je pravda, že hodně optimalizací je udělána pro 8051, ale většina knihoven je psána v C to kvůli portabilitě těchto knihoven pro jednotlivé platformy. Takže zde třeba neexistuje podpora DUAL DATA POINTER (což by se např. u memcpy nebo strcpy docela hodilo). Pokud máte 517 s matematickým koprocesorem, tak se s podporou musíte rozloučit. Ale třeba se v budoucnosti dočkáme J a iniciativě se meze nekladou. Já pracuji na optimalizacích pro Aduc832 a co vy ?

 

Instalace

SDCC je možné provozovat pod Windows i pod Linuxem. Při surfování zjistíte, že máte možnost si stáhnou buď hotový předkompilovaný balíček (slangově binárka a soubor má v názvu slovo bin) pro obě platformy nebo zdrojové kódy (slangově zdrojáky a soubor má v názvu src).

Nejjednodušší možnost. Buď si stáhnete officialni realease (aktualní je tuším verze 2.3.0) nebo tzv. snapshot build (což jsou předkompilované verze z nejnovějších zdrojáků). Officialní realease má své výhody, protože je otestovaná, ale bohužel stará. Snapshot build jsou čerstvé verze s množstvím oprav a optimalizací, ale nové funkce mohou obsahovat chyby. Výběr je na čtenáři. Já osobně jsem s snapshot buildem problémy neměl.

Dodatek: Pokud se podíváte po internetu, tak zjistíte, že skoro každý radí používat nejnovější verzi sdcc nebo alespoň verzi 2.3.0 (prý, že staré mněli hodně chyb). Instalace probíhá tak, že rozbalíte soubory na disk (jednoduché a prosté).

Složitější možnost (jak pro koho). Předkompilované verze mají tu nevýhodu, že nemají zkompilované všechny funkce anebo mají naopak zkompilované funkce jenž nepoužijete. Lékem může být vytvoření vlastní binární verze sdcc (prostě sdcc na míru). Pokud si budete chtít jej přeložit pod Windows, tak se musím zmínit o projektu Cygwin (www.cygwin.com)

Cygwin

Cygwin je název knihovny a soubor programů, který umožňuje provozovat a kompilovat linuxové (unixové) programy a vytvářet spustitelné soubory pod platformou win32. Je to docela zajímavý projekt a těší se velké oblibě. Pomocí cygwinu si můžete zkompilovat sdcc ale to až někdy jindy.

 

Práce s sdcc

Nejprve otestujeme funkčnost kompileru.

sdcc -v (vypíše info)

 

Pokud spustíme sdcc bez parametru objeví se výpis možností přepínačů. Podrobnosti co, který přepínač má za funkci se dočtete v manuálu (pro první kroky doporučuji použít sdccman.pdf).

A konečně kompilace nějakého porgramu. Ukázkový program naleznete v balíčku example_intro.zip.

sdcc hello.c -I g:\sdcc\share\sdcc\include -L g:\sdcc\share\sdcc\lib\small

Přepínač I a nasledující cesta udává, kde se nacházejí hlavičkové soubory. Přpínač L a nasledující cesta udává, kde se nacházejí soubory knihoven, které použije linker. Pro kompilaci doporučuji použít přiložený bat soubor.

Tak tohle byl stručný úvod do světa SDCC.

M. M. 29.1.2003