Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:http-stm32

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2014:http-stm32 [2015/01/18 13:57]
Ondřej Maňas
2014:http-stm32 [2015/01/18 22:33] (aktuální)
Ondřej Maňas
Řádek 5: Řádek 5:
  
 ===== Úvod ===== ===== Úvod =====
-Projekt má za cíl demo aplikaci HTTP serveru. Výsledné demo má sloužit jako základ pro vývoj centrální jednotky senzorické sítě. Tato jednotka bude sbírat údaje ze senzorů v síti a zobrazovat naměřená data uživateli pomocí webových stránek. Dále by tento server mohl sloužit k jednoduchému monitoringu ​vyvýjených ​přípravků během testů. (R&D centrum se nachází jinde než testovaný výrobek)+Projekt má za cíl demo aplikaci HTTP serveru. Výsledné demo má sloužit jako základ pro vývoj centrální jednotky senzorické sítě. Tato jednotka bude sbírat údaje ze senzorů v síti a zobrazovat naměřená data uživateli pomocí webových stránek. Dále by tento server mohl sloužit k jednoduchému monitoringu ​vyvíjených ​přípravků během testů. (R&D centrum se nachází jinde než testovaný výrobek) ​
  
 ===== Popis hardwaru a nastavení sítě ===== ===== Popis hardwaru a nastavení sítě =====
  
 ==== Hardware ==== ==== Hardware ====
-Server je implementován do vývojového kitu [[http://​www.st.com/​web/​catalog/​tools/​FM116/​SC959/​SS1532/​PF252419|STM32F4DISCOVERY ]]. Kit je osazen ​mikroprocessorem ​s jádrem ​architectury ​ARM rodiny Cortex M4. K vývojovému kitu je připojená rozšiřující deska [[http://​www.st.com/​web/​catalog/​tools/​FM146/​CL1984/​SC720/​SS1462/​PF255417?​sc=stm32f4dis-expansion|STM32F4DIS-BB ]] jinak Base Board. Rozšiřující deska obsahuje Ethernet PHY LAN8720A. Server je napřímo připojen ke klientskému počítači (síť o dvou prvcích) . Dále je použit obvod pro emulaci ​virtualního ​COM portu pro zasílaní ​dat k zobrazení. ​tento přístup nahrazuje modul sběru dat ze senzorů a samotné senzory. K Base boardu je možné připojit ještě další zařízení jako kamera OV7670, nebo LCD. Ty ovšem nejsou v demo aplikaci použity. ​+Server je implementován do vývojového kitu [[http://​www.st.com/​web/​catalog/​tools/​FM116/​SC959/​SS1532/​PF252419|STM32F4DISCOVERY ]]. Kit je osazen ​mikroprocesorem ​s jádrem ​architektury ​ARM rodiny Cortex M4. K vývojovému kitu je připojená rozšiřující deska [[http://​www.st.com/​web/​catalog/​tools/​FM146/​CL1984/​SC720/​SS1462/​PF255417?​sc=stm32f4dis-expansion|STM32F4DIS-BB ]] jinak Base Board. Rozšiřující deska obsahuje Ethernet PHY LAN8720A. Server je napřímo připojen ke klientskému počítači (síť o dvou prvcích). Dále je použit obvod pro emulaci ​virtuálního ​COM portu pro zasílání ​dat k zobrazení. ​Tento přístup nahrazuje modul sběru dat ze senzorů a samotné senzory. K Base boardu je možné připojit ještě další zařízení jako kamera OV7670, nebo LCD. Ty ovšem nejsou v demo aplikaci použity. ​ 
 + 
   ​   ​
 {{http://​www.st.com/​st-web-ui/​static/​active/​en/​fragment/​product_related/​rpn_information/​board_photo/​stm32f4dis-ext.jpg?​300}} {{http://​www.st.com/​st-web-ui/​static/​active/​en/​fragment/​product_related/​rpn_information/​board_photo/​stm32f4dis-ext.jpg?​300}}
  
 ==== Nastavení sítě ==== ==== Nastavení sítě ====
-Jedinou věcí která je potřeba, je nastavit ​manualně ip adresy obou zařízení. Server je nastaven na adresu ''​192.168.10.10''​ z toho plyne že klientský počítač je potřeba nastavit na adresu například ''​192.168.10.11''​. V budoucnu se samozřejmě očekává, že síť bude mít standartní architekturu a ip adresa serveru bude dynamicky nastavena řídímcím ​prvkem. Pro naši jednoduchou síť postačí tento přístup.+Jedinou věcí která je potřeba, je nastavit ​manuálně ip adresy obou zařízení. Server je nastaven na adresu ''​192.168.10.10''​ z toho plyneže klientský počítačje potřeba nastavit na adresu například ''​192.168.10.11''​. V budoucnu se samozřejmě očekává, že síť bude mít standartní architekturu a ip adresa serveru bude dynamicky nastavena řídícím ​prvkem. Pro naši jednoduchou síť postačí tento přístup.
  
 {{:​2014:​http-stm32:​blok_wiki.png?​450|Blokač}} {{:​2014:​http-stm32:​blok_wiki.png?​450|Blokač}}
  
 ====== Webová stránka ====== ====== Webová stránka ======
-Cílem je webová stránka zobrazující graf hodnot. ​Zatímto ​učel nebylo možné se vyhnout použití již napsané funkce v javascriptu. Pro svoji jednoduchost byla zvolena metoda [[http://​www.flotcharts.org/​|flot ]] využívající funkce knihovního balíku jQuery ([[http://​www.flotcharts.org/​flot/​examples/​basic-usage/​index.html|Referenční příklad]]) Použitím těchto knihoven vzroste nárok na velikost paměti serveru o 381 kB a co víc je potřeba tento objem dat odeslat s každým požadavkem na aktualiazaci ​webové stránky.+Cílem je webová stránka zobrazující graf hodnot. ​Za tímto ​učel nebylo možné se vyhnout použití již napsané funkce v javascriptu. Pro svoji jednoduchost byla zvolena metoda [[http://​www.flotcharts.org/​|flot ]] využívající funkce knihovního balíku jQuery ([[http://​www.flotcharts.org/​flot/​examples/​basic-usage/​index.html|Referenční příklad]]) Použitím těchto knihoven vzroste nárok na velikost paměti serveru o 381 kB a navíc ​je potřeba tento objem dat odeslat s každým požadavkem na aktualizaci ​webové stránky.
  
-Obě knihovni ​jsou napsány v tradičním tvaru - obsahují komentáře a odřádkování. Odstraněním této irelevantní složky zmenšíme nárok na paměť na 191 kB([[https://​code.google.com/​p/​chromium/​source/​browse/​trunk/​samples/​audio/​flot/?​r=2914|jquery.flot.min a jquery.min ]]). Dalším krokem jak zjednodušit práci serveru je ukládání jíž stáhnutých stránek do cache paměti prohlížeče. Tento jednoduchý server bude podporovat verzi protkolu ​''​HTTP 1.0''​ kde je nastavení cache pamětí složitější a protože se nejedná o klíčový problém tak nebyl vyřešen. Nejvhodnější variantou je odkazovat se na jiné stránky, které také využívají stejné knihovny jQuery jako například www.google.com nebo www.dokuwiki.com. Tato možnost vyžaduje připojení klienta k internetu.+Obě knihovny ​jsou napsány v tradičním tvaru - obsahují komentáře a odřádkování. Odstraněním této irelevantní složky zmenšíme nárok na paměť na 191 kB([[https://​code.google.com/​p/​chromium/​source/​browse/​trunk/​samples/​audio/​flot/?​r=2914|jquery.flot.min a jquery.min ]]). Dalším krokem jak zjednodušit práci serveruje ukládání jíž stáhnutých stránek do cache paměti prohlížeče. Tento jednoduchý server bude podporovat verzi protokolu ​''​HTTP 1.0''​ kde je nastavení cache pamětí složitější a protože se nejedná o klíčový problém tak nebyl vyřešen. Nejvhodnější variantou je odkazovat se na jiné stránky, které také využívají stejné knihovny jQuery jako například www.google.com nebo www.dokuwiki.com. Tato možnost vyžaduje připojení klienta k internetu.
  
 ==== Index html ==== ==== Index html ====
-Snahou je navrhnout stránku tak aby při dynamickém parsování dat serverem bylo zapotřeba co nejmenší počet operací. Proto jako vstupní data pro vykreslení je řetězec znaků reprezentující hodnoty v šestnáckové ​soustavě. ​  +Snahou je navrhnout stránku tak aby při dynamickém parsování dat serverem bylo zapotřebí co nejmenší počet operací. Proto jako vstupní data pro vykreslení je řetězec znaků reprezentující hodnoty v šestnáctkové ​soustavě. ​  
-například+ 
 +Vstupní ​řetězec v jazyce JavaScript
  
 <code JavaScript>​ <code JavaScript>​
Řádek 34: Řádek 36:
 </​code>​ </​code>​
  
-V následujícím úryvku kódu je ukázka parsování ​vztupních ​dat.+V následujícím úryvku kódu je ukázka parsování ​vstupních ​dat.
 <code JavaScript>​ <code JavaScript>​
 var datasets =   [[  var datasets =   [[
Řádek 48: Řádek 50:
  
 ===== Server ===== ===== Server =====
-Tento projekt vychází ze [[http://​www.element14.com/​community/​docs/​DOC-51670/​l/​stm32f4dis-bb-discover-more-software-examples|Software examples]] pro Base Board. V tomto balíčku je ukazkový ​projekt implementovaného http serveru který pomocí CGI ovládá jednu LED a periodicky vyčíta hodnu napětí na AD převodníku(SSI). Je možné si zvolit příklad z RTOS a bez něj. Bohužel příklad s RTOS se mi nepodařilo zprovoznit.+Tento projekt vychází ze [[http://​www.element14.com/​community/​docs/​DOC-51670/​l/​stm32f4dis-bb-discover-more-software-examples|Software examples]] pro Base Board. V tomto balíčku je ukázkový ​projekt implementovaného http serveru který pomocí CGI ovládá jednu LED a periodicky vyčítá hodnu napětí na AD převodníku(SSI). Je možné si zvolit příklad z RTOS a bez něj. Bohužel příklad s RTOS se mi nepodařilo zprovoznit.
  
-Nějnižší komunikační vrstvy jsou naimplementovány lwIP (low weigth IP) stackem. Vrstva http serveru je zřejmně naimplementována knihovnou funkcí vývojářů STM. Kód http stránek je uložen jako jeden string pro každý soubor ve formátu ​hexadecimalních ​čísel. Proto byl v perlu napsán script pro překlad ASCII to HEX. Podle vzoru ''​fsdata.c''​ byl vytvoren ​''​fsdata_custom.c''​. ​+Nejnižší komunikační vrstvy jsou naimplementovány lwIP (low weigth IP) stackem. Vrstva http serveru je zřejmě naimplementována knihovnou funkcí vývojářů STM. Kód http stránek je uložen jako jeden string pro každý soubor ve formátu ​hexadecimálních ​čísel. Proto byl v perlu napsán script pro překlad ASCII to HEX. Podle vzoru ''​fsdata.c''​ byl vytvořen ​''​fsdata_custom.c''​. ​
  
 ==== Server Side Includes ==== ==== Server Side Includes ====
-Server Side Includes neboli SSI je technika kterou využijeme k implementaci dynamicky se měnících dat. Implementaci SSI poznáme podle koncovky ''​.ssi''​ , ''​.shtml''​ a ''​.shtm'' ​to musíme dodržet i v našem případě. Vkládání textu do uložených ​stránech ​v pamětí ​processoru ​probíhá tak že obslužný program obdrží požadavek ''​GET''​ na soubor s koncovkou např. ''​.shtml''​. Ukazatelem na místo kde bude přidán text se označuje tagem. Například+Server Side Includes neboli SSI je technika kterou využijeme k implementaci dynamicky se měnících dat. Implementaci SSI poznáme podle koncovky ''​.ssi''​ , ''​.shtml''​ a ''​.shtm'' ​tu musíme dodržet i v našem případě. Vkládání textu do uložených ​stránek ​v pamětí ​procesoru ​probíhá tak že obslužný program obdrží požadavek ''​GET''​ na soubor s koncovkou např. ''​.shtml''​. Ukazatelem na místo kde bude přidán text se označuje tagem. Například
  
 <code JavaScript>​ <code JavaScript>​
Řádek 59: Řádek 61:
 </​code>​ </​code>​
  
-Před odesláním souboru ​probíha ​jeho parsování. Text je generován funkcí, která ja volána mechanizmy stacku. Její argumenty jsou dány, proto pole vložených znaku je předáváno ​globalní ​proměnou s ukazatelem na vkládané pole.+Před odesláním souboru ​probíhá ​jeho parsování. Text je generován funkcí, která ja volána mechanizmy stacku. Její argumenty jsou dány, proto pole vložených znaku je předáváno ​globální ​proměnou s ukazatelem na vkládané pole.
  
 ==== Ring buffer ==== ==== Ring buffer ====
-Řetězec vkládaný ​ma místo tagu je implementovaný jako kruhová paměť. Zde je ukázka kódů na jednom místě.+Řetězec vkládaný ​má místo tagu je implementovaný jako kruhová paměť. Zde je ukázka kódů na jednom místě. 
 + 
 +Declarace a inicializace
 <code c> <code c>
 typedef struct ​ typedef struct ​
Řádek 82: Řádek 86:
  
 Zápis a čtení z bufferu Zápis a čtení z bufferu
- 
 <code c> <code c>
  
Řádek 149: Řádek 152:
 </​code>​ </​code>​
  
-V kódu je zřejmé že ukazatel na ring buffer ''​buf->​data''​ je pří čtení ​incrementován ​a při zápisu ​decrementován. Výsledkem je, že nejnovější hodnota je vyčtena jako první viz. video.+V kódu je zřejmé že ukazatel na ring buffer ''​buf->​data''​ je pří čtení ​inkrementován ​a při zápisu ​dekrementován. Výsledkem je, že nejnovější hodnota je vyčtena jako první viz. [[http://​uloz.to/​xB6m1abB/​dscf5493-avi|video]].
  
 ==== Příjem dat ==== ==== Příjem dat ====
-Data jsou posílana ​ve stejném formátu ve kterém jsou vkládána do výsldné ​www stránky. Vhodné by bylo nastavení DMA kanálu. To je ponecháno pro budoucí vývoj. V tomto projketu je využit pouze periferie přijímače ''​UART''​. Při příchodu znaku je pomocí přerušení zavolána rutina příjmu dat. Přerušení není nijak omezováno, protože časově citlivá komunikace s Ethernet Phy se děje pomocí ​periferii ​a DMA.+Data jsou posílána ​ve stejném formátu ve kterém jsou vkládána do výsledné ​www stránky. Vhodné by bylo nastavení DMA kanálu. To je ponecháno pro budoucí vývoj. V tomto projketu je využit pouze periferie přijímače ''​UART''​. Při příchodu znaku je pomocí přerušení zavolána rutina příjmu dat. Přerušení není nijak omezováno, protože časově citlivá komunikace s Ethernet Phy se děje pomocí ​periferií ​a DMA.  
 + 
 +Rutina přerušení Uartu
 <code c> <code c>
  
Řádek 171: Řádek 176:
 </​code>​ </​code>​
  
 +===== Video =====
 +Video naleznete [[http://​uloz.to/​xB6m1abB/​dscf5493-avi|zde]] heslo je ''​stm32http''​.
 +
 +==== Popis videa ====
 +Přes prohlížeč Mozzila firefox jsem se připojil na IP adresu ''​192.168.10.10'',​ poté jsem přes terminál odesílal pomocí maker terminálu stringy např ''"​0025"''​. Po každém odeslání jsem stránku z aktualizoval.  ​
 + 
 +
 +===== Pár slov autora =====
 +Projekt je součástí vývoje jedné nejmenované firmy, proto nejsou vloženy žádné zdrojáky. Nicméně jsem se možná trochu rozsáhleji pokoušel nastínit svůj postup k cíli kdyby náhodou někdo řešil podobně zaměřený projekt. Projekt je psán pro placené vývojové prostředí IAR workbench ovšem referenční design STM podporuje i prostředí keil. 
  
  
   ​   ​
2014/http-stm32.1421585833.txt.gz · Poslední úprava: 2015/01/18 13:57 autor: Ondřej Maňas