Rozdělení kódu projektu do jednotlivých souborů

Pořadí linkování  web51_manual.html  Použití projektu Web 51
Jak plyne z popisu makefile, každý projekt se při linkování skládá z několika souborů. Tento odstavec by vám měl objasnit co je uloženo v jednotlivých zdrojovýh souborech a jak skládat data do FLASH (případně EEPROM) paměti.

.HTML

Soubory uložené nakonec v paměti Web51 (FLASH programu, EEPROM interní nebo externí), jako předpřipravené HTML stránky, které jsou volány souborovým systémem. Soubory se konvertují pomocí direktivy v makefile na .ASM soubor pomocí “html2db.pl“ scriptu. Tento perlový script likviduje CR LF znaky, neboli konce řádků tím, že je při převodu na definici tabulky v .ASM souboru prostě ignoruje. To nevadí čistému HTML. Bude-li však v kódu javascript, bude absence konců řádek znamenat nefunkčnost scriptu. V takovém případě je nutné do definice překladu tohoto .HTML souboru v makefile přidat parametr “-appendlf“ (viz příklad LED3).

Na soubor “index.html“ je nutné se dostat nejen voláním z prohlížeče “http://X.X.X.X/index.html“ ale také jenom posledním lomítkem jako na hlavní soubor web serveru. To je zde řešeno v makefile při překladu, neboť pro překlad index.obj je zde uveden parametr “-index 0 index.html“ kde část “-index 0“ zajišťuje právě odkaz na soubor druhou hlavičkou, nejen jako název souboru, ale také jako na “/“ - hlavní stránku zařízení.

Z HTML stránek můžete volat CGI scripty pomocí speciálního znaku apostrof “ “. Pokud tedy potřebujete použít v kódu HTML znak apostrof, je nutné jej zdvojit, což bude přeloženo jako jeden apostrof. Překladač nemá možnost zkontrolovat volání CGI skriptů z HTML kódu, jejich volání je až při interpretaci HTML kódu samotným WWW8051. Nezapomeňte proto všechny použité CGI skripty zahrnout do projektu a přidat do výsledného kódu.

.GIF .JPG .PNG

Obrázky lze do procesoru samozřejmě také ukládat do paměti Web51 (FLASH programu, EEPROM interní nebo externí). Příklad kde je to řešeno je například LED1 nebo teploměr. Ze souborů například .GIF je pro linkování linkerem potřeba samozřejmě vytvořit také soubor .OBJ Že se jedná o binární soubor si detekuje již samotný script “html2db.pl“ takže je zde potřeba pouze nezapomenout uvést všechny použité obrázky v proměnných FILES a OBJS a doplnit do makefile potřebné řádky pro jejich přilinkování do výsledného kódu.

.CGI

CGI scripty jsou velmi vhodnou cestou pro předávání dat mezi programem, který běží ve Web51 a nemá s generováním stránek nic společného (měřící a vyhodnocovací rutiny) a HTML stránkami. Kód scriptu je obvykle psán v assembleru procesoru, ale script se volá vždy až když je třeba odeslat WWW stránku, proto by jeho vykonání nemělo trvat zbytečně dlouho. Většinou proto pouze odesílá ve vhodném formátu data uložená v nějaké proměnné. Podrobný popis struktury CGI souboru a jejich možností následuje dále v této dokumentaci. Druhou možností je napsat skript v Pkódu.

www8051.asm

Jedná se o hlavní program projektu. Na jeho začátku jsou vloženy .INC soubory obsahující nezbytné definice a alokována paměť pro systémové proměnné.

Následuje sekce “Main Loop“ kde jsou definovány “.section fast, #alloc“ a “.section slow, #alloc“. V těchto sekcích by měly být umístěn kód konkrétní aplikace, který se zpracovává. Sekce FAST je spouštěna přibližně každou milisekundu, sekce SLOW každých 50 cyklů sekce FAST. Volání těchto sekcí se provádí z hlavního systémového kódu, umístěného v souboru “web51.asm“. Definice konstant (to znamená i konstanty slowtiming=50) jsou uloženy v souboru “param.inc“. Do těchto dvou sekcí umístíte kód, který obsluhuje hardwarová rozhraní. Tyto sekce musí být průchozí, tj. nekončit příkazem ret a podobně (blíže viz. popis sekce reset_device). Potřebné podprogramy, volané většinou příkazem LCALL, můžete umístit do poslední části souboru “www8051.asm“ která je standardně umístěna za sekcí SLOW a je uvozena deklarací “.text“.

Pokud potřebujete nějaký kód spouštět pouze po startu zařízení (například inicializaci periferií) doplňte si mezi sekci SLOW a část “.text“ další sekci “.section reset_device, #alloc“ či “.section reset_network, #alloc“která bude vykonána pouze po startu programu.

Rozdíl mezi nimi spočívá v tom, že nejprve se vykonají všechny sekce reset_device, ze všech modulů a poté všechny sekce reset_network, opět ze všech modulů. V těchto sekcích je zakázáno přerušení. Tyto sekce musí obsahovat kód, který není ukončen příkazem ret, tj. jsou plně průchozí.

Nejjednodušším příkladem jednou provedené sekce pak může být uvedený kód, kde je použita instrukce NOP, místo inicializačního kódu:

.section reset_device, #alloc

nop
.text
test_cidla: …..

Je nutno si rovněž uvědomit, že sekce končí na hranici další sekce, vykonávání programu po instrukci NOP v tomto příkladu pokračuje instrukcemi z jiného modulu obsahujícím sekci reset_device a nikoli instrukcemi za návěštím test_cidla.

Obdobou těchto dvou sekcí je sekce “.section one_times, #alloc“, do které je soustředěn kód vykonávaný pouze jednou po startu a s povoleným přerušením. Kód této sekce opět nesmí končit příkazem ret.

Shrnutí popisu projektu

V této kapitole jsme vysvětlili základy složení projektů Web51. Pokud budete tápat v assembleru, v sekci DOWNLOAD Najdete v kapitole "Dokumentace související s projektem" podrobný manuál k použitému assembleru..

Pro další práci doporučujeme nahrát si do HW KITu příklad LED1 nebo LED2 a jejich postupnou modifikací začít.





Sponzored by LPhard Ltd. Graphics by GIMP Created by EasyPad

(c)Copyright 2000, 2001, HW server & Radek Benedikt
Web51@HW.cz, Web51.HW.cz

Final applications of the Web51 : www.HWgroup.cz
Pořadí linkování  Obsah  Použití projektu Web 51