Paměťový model projektu Web51

není předchozí kap.  software.html  Web 51 - Vývojový systém - podrobný popis
Web51 nevystačí s předdefinovanými segmenty a využívá pro svoji činnost některých uživatelských segmentů. Pro sestavení (linkování) programu s uživatelskými segmenty nevystačíme samozřejmě se zabudovanými skripty v linkeru a musíme použit vlastní (projekt Web51 je má uloženy v adresáři /lib, a označeny www51.sc*).

Nejprve tedy něco o organizaci programové paměti. Zobrazme si příslušné segmenty programové paměti na obrázku, spolu s jejich typickými uloženími ve zdrojových souborech.


Segment vectors obchází to, že GNU assembler/linker neumí absolutní segmenty, ale pouze relativní. Tento segment počítá s umístěním od adresy 0. V celém projektu může být tento segment pouze na jedinném místě a musí obsahovat všechny vektory přerušení.

Segment reset_begin se spouští po resetu procesoru, nuluje interní paměť procesoru a nastavuje základní časování I/O operací a timer0 generující 1 ms přerušení.

Segment reset_device je rozsekán v jednotlivých knihovních modulech. Zabezpečuje základní inicializaci modulů.

Segment reset_network je obdobou segmentu reset_device a umožňuje určit, alespoň ve třech stupních pořadí, v jakém se budou jednotlivé inicializace modulů vykonávat.

Segment reset_end ukončuje sekci reset a spouští přerušovací systém procesoru.

Segment one_times umožňuje provést kód, který se vykonává jen jednou, a vyžaduje plně inicializovaný systém.

Segment fast_begin je první částí hlavní programové smyčky. Zabezpečuje základní obsluhu handshake na sériovém kanálu a spouští zpracování přijatého ethernetovského paketu. Není-li co zpracovávat a od posledního průchodu smyčkou uběhla alespoň 1 ms, je řízení předáno do následujícího segmentu, jinak zůstává zpracování v tomto segmentu.

Segment fast obsahuje vlastní uživatelský kód, spouštěný s periodou cca 1 ms. Do tohoto segmentu je zařazeno např. ovládání LED,... Použití tohoto segmentu najdeme např. v příkladech v souborech www8051.asm. Pro první seznámení doporučuje příklad LED3.

Segment fast_end obsahuje čítač, zda uplynulo 50 volání (resp. slowtiming) volání. Je-li tato podmínka splněna, je spouštěno zpracování slow sekcí. V opačném případě zpracování pokračuje skokem na začátek sekce fast_begin.

Segment slow_begin provádí reset bitů stateSyn, zamezujících web51 odpovědět na pokus o navázání o TCP spojení častěji jak jednou za 50 ms. Poté je zpracování předáno do segmentu slow.

Segment slow obsahuje vlastní uživatelský kód, spouštěný s periodou cca 50 ms. Do tohoto segmentu je zařazeno např. obsluhu tlačítek,... Tento segment najdeme v příkladech v souboru www8051.asm

Segment slow_end ukončuje hlavní "slow" programovou smyčku a předává řízení skokem zpět na začátek sekce fast_begin.

Segment cpu_rom obsahuje především knihovní moduly, které je nutno mít pod hranicí 8 kByte, vzhledem k adresaci p-code funkcí, které používají pouze 13-ti bitovou adresaci.

Segment .text je standartním kódovým segmentem. Obsahuje vlastní uživatelské podprogramy,...

Segment cpu_dir_begin patří k segmentům souborového systému. Obsahuje hlavičku souborového systému. Souborový systém v ROM je povolován při překladu knihoven definováním podmínky ROMfilesystem. Hlavička a patička adresáře souborového systému je nadefinována pomocí knihovního modulu filecpu.asm a uživatel se o ni nemusí starat.

Segment cpu_dir obsahuje adresář souborového systému. Obvykle je generován pro každý soubor zařazovaný do adresáře skriptem html2db.pl.

Segment cpu_dir_end obsahuje patičku souborového systému. Je součástí knihovního modulu filecpu.asm

Segment cpu_files obsahuje data souborového systému, pro překlad konvertovaná z jednotlivých vstupních formátů (html, jpeg, ...) skriptem html2db.pl

Segment cpu_top je standartním kódovým segmentem. Obsahuje vlastní uživatelské podprogramy,...



Datovou pamět, používanou systémem Web51, lze rozdělit, v závislosti na použitém procesoru (89S8252 či 89C51RD2), do celkem 5 až 6 částí. Korektní použití proměnných v jednotlivých segmentech je plně na zodpovědnosti programátora. Assembler je schopen pouye korektně přidělit místo jednotlivým proměnným a popřípadě ohlídat přeplnění jednotlivých segmentů. Není však v jeho silách ohlídat použití proměnné definované v jiném segmentu než je povolen příslušným řídicím registrem.

Z hlediska linkeru zaslouží zmínku snad jen část obsahující obsah datové EEPROM. Jeho struktura připomíná programovou paměť.


[4] Linker sám neumí přidělit nevyužité části v adresním rozsahu 0x00...0x1F (resp. spíše 0x08...0x1F), pokud nejsou definovány pomocí segmentu .rdata či příkazem .rcomm. Proto je vhodné v případě potřeby sem některé proměnné přesunout, tak jaj je vidět v některých ukázkových příkladech v modulu www8051.asm.





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
není předchozí kap.  Obsah  Web 51 - Vývojový systém - podrobný popis