Souborový systém Web 51

Web 51 - Implementace jednoducheho http serveru  software.html  Web 51 - Web51 SMTP
Souborový systém může být rozložen na 3 "média" externí I2C EEPROM, flashROM procesoru, EEPROM procesoru (prohledávání souborového systému probíhá v uvedeném pořadí, proto lze přidáním externí I2C EEPROM překrýt soubory v procesoru).

Souborový systém ve flashROM/EEPROM procesoru

Jednotlivé položky souborového systému jsou obvykle generovány skriptem html2db. Pro správnou funkci filesystému je nutno dodržet pořadí linkování, tak aby byla dodržena struktura dat ve výsledném slinkovaném souboru, zobrazená na následujícím schematu. Správné slinkování je zabezpečováno linkovacím skriptem www8051.sc, v praxi je proto pouze nutné dodržet pojmenování segmentů, tak jak jsou deklarovány v tomto skriptu, tj.
cpu_dir - pro adresářovou položku umístěnou v paměti flash procesoru
ee_dir - pro adresářovou položku umístěnou v paměti eeprom procesoru
Umístění připravených html stránek do segmentů cpu_files a ee_files je pouze doporučené, systém je pro svoji činnost nevyžaduje, data pouze musí být ve stejném typu paměti flash/eeprom/I2C jako jím odpovídající adresářová položka.

Příklad souborového systému ve flashROM procesoru:


;Počátek adresáře filesystému flashROM procesoru
;Soubor filecpu.asm
        .section cpu_dir_begin, #alloc
.global	filedir
filedir:	

;Položka adresáře filesystému flashROM procesoru
;Soubor config.html
        .section cpu_dir, #alloc
        .word   'c'+'o'+'n'+'f'+'i'+'g'+'.'+'h'+'t'+'m'+'l'
        .byte   1       ;text/html
        .byte   0       ;reserved
        .word   begin0
        .word   end0

        .word   0       ;hodnota zadaná parametrem -index
        .byte   1       ;text/html
        .byte   0       ;reserved
        .word   begin0
        .word   end0
....
....

;Položka adresáře filesystému flashROM procesoru
;Soubor setup.html
        .section cpu_dir, #alloc
        .word   's'+'e'+'t'+'u'+'p'+'.'+'h'+'t'+'m'+'l'
        .byte   1       ;text/html
        .byte   0       ;reserved
        .word   begin1
        .word   end1

;Položka adresáře filesystému flashROM procesoru
;CGI skripty - soubor bdc.asm
        .section cpu_dir, #alloc
        .word   'b'+'d'+'c'+'.'+'c'+'g'+'i'
        .byte   0x10            ;cgi
        .byte   0               ;reserved
        .word   cgi8begin
        .word   cgi8end

;Položka adresáře filesystému flashROM procesoru
;CGI skripty - soubor fl.asm
        .section cpu_dir, #alloc
        .word   'f'+'l'+'.'+'c'+'g'+'i'
        .byte   0x10            ;cgi
        .byte   0               ;reserved
        .word   cgi9begin
        .word   cgi9end
;
;Konec adresáře filesystému flashROM procesoru
;Soubor filecpu.asm
	.section cpu_dir_end, #alloc
;
	.word	-1
	.byte	0		;none
	.byte	0		;reserved
	.word	0
	.word	0

;Položka filesystému flashROM procesoru
;Soubor config.html
        .section      cpu_files, #alloc
begin0:
       .ascii	"...
end0:

;Položka filesystému flashROM procesoru
;Soubor setup.html
        .section      cpu_files, #alloc
begin1:
       .ascii	"...
end1:

Výše uvedená jména souborů v příkladu jsou samozřejmě pouze ilustrativní a odpovídají vzorovému projektu serial.

Naprosto stejnou strukturu má i souborový systém v paměti EEPROM procesoru, liší se jen jména implicitní jména segmentů používaná skriptem html2db a to ee_dir pro segment s položkami adresáře a ee_files pro segment s obsahem jednotlivých "souborů".

I2C EEPROM souborový systém

Struktura I2C EEPROM souborového systému je stejná jako struktura filesystému ve flashROM procesoru s jedinou vyjímkou, adresářové položky nejsou umístěny od libovolné adresy, ale začínají na pevně dané adrese. Před adresářovou strukturou je v I2C EEPROM paměti umístěna signatura, určující, že se jedná o paměť s externími www daty.

Příklad souborového systému v I2C EEPROM paměti:


	;;cseg  at      0000h
        .text
        .ascii  "@BCL"  ;Signatura

        .word   'i'+'n'+'d'+'e'+'x'+'.'+'h'+'t'+'m'+'l'
        .byte   1       ;text/html
        .byte   0       ;reserved
        .word   begin0
        .word   end0

        .word   0
        .byte   1       ;text/html
        .byte   0       ;reserved
        .word   begin0
        .word   end0
....
....

begin0:
        .ascii  "...
end0:

Adresářová položka

Adresářová položka, používaná Web 51, je osmibajtová.
První dva bajty obsahují hash jména souboru. Tento hash je počítán jako 16-ti bitový součet jednotlivých písmen jména souboru vyjádřených v ASCII kódu. Součástí součtu je i oddělovací tečka mezi jménem a příponou. Do součtu se počítá i přípona jména souboru. Hash se počítá jen z části jména souboru, za posledním výskytem znaku oddělujícího adresáře tj. znaku /. Do součtu se proto nezapočítávají jména adresářů, to znamená, že jméno img0.gif je ekvivalentní jménu image/img0.gif. Z tohoto popisu zároveň vyplývá, že hash souboru /, tj. implicitní html stránky je roven 0. Při generaci stránek pomocí skriptu html2db lze označit libovolnou stránku mimo jejím jménem i dalším hashem, např. výše uvedenou root hodnotou 0 pomocí přepínače -index hodnota_hash.
Souborový systém končí adresářovou položkou s hodnotou hash rovnou 0FFFFh, použitou jako EOD (End Of Directory).
Třetí bajt určuje typ souboru. Podle typu souboru je vyslána odpovídající http hlavička a zároveň zvolen způsob zpracování soubory. U souborů typu 1 a 2 je vyhledáváno volání cgi skriptů. Soubory typu 10h (CGI) jsou zpracovány PCode interpretrem.

typzpůsob zpracování / hlavička
0vyslán bez hlavičky
1vyslán s hlavičkou 'HTTP/1.1 200 OK',LF,'Content-type: text/html',LF,LF
2vyslán s hlavičkou 'HTTP/1.1 200 OK',LF,'Content-type: text/plain',LF,LF
3vyslán s hlavičkou 'HTTP/1.1 200 OK',LF,'Content-type: image/jpeg',LF,LF
4vyslán s hlavičkou 'HTTP/1.1 200 OK',LF,'Content-type: image/gif',LF,LF
5vyslán s hlavičkou 'HTTP/1.1 200 OK',LF,'Content-type: image/png',LF,LF
6vyslán s hlavičkou 'HTTP/1.1 200 OK',LF,'Content-type: application/octet-stream',LF,LF
10hinterpretován jako Pcode CGI skript

Čtvrtý bajt je rezervován a musí být z důvodů kompatibility s budoucími verzemi roven nule.

Pátý a šestý bajt obsahuje ukazatel na začátek souboru v paměti.

Sedmý a osmý bajt obsahuje ukazatel za konec souboru v paměti.





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
Web 51 - Implementace jednoducheho http serveru  Obsah  Web 51 - Web51 SMTP