Start z STM32 VL Discovery – 17 — TCP/IP – 3

Start z STM32 VL Discovery – 17 — TCP/IP – 3
Razem głosów: 3 co stanowi: 93.33% całości.

No tak prymitywną stronkę i prymitywny pseudo serwerek WWW już umiemy postawić.

Zresztą jak widać z poprzedniego przykładu kod jest bardzo prosty, więc teraz zajmiemy się

trochę inną obsługą ENC28J60 a przynajmniej bardziej optymalną i wydajniejszą.

To tyle słowem wstępu …. a może jednak nie :)

Jak pamiętacie z poprzedniego artykułu używaliśmy lekkiego i prostego stosu TCP/IP autorstwa

Guido Socher-a , który oryginalnie był napisany dla mikrokontrolerów AVR.

W przypadku naszych ARM z jądrem Cortex mamy możliwość, a wręcz powinność korzystać

z dobrodziejstwa jakim są rozbudowane funkcje obsługi przerwań, dzięki czemu stworzymy dużo

skuteczniejszy system serwera WWW bazujący na przerwaniach.

Wprowadzenie 

Więc jak pamiętacie z poprzedniego arta w pętli głównej stale odpytujemy ENC czy pakiet przybył

czym niepotrzebnie obciążamy rdzeń mikrokontrolera , fakt że to coś co stworzyliśmy to żadne obciążenie

ale już na tym etapie warto wspomnieć że tak pisać programów nie warto, bowiem w przypadku

większego kodu i bardziej skomplikowanej strony , gdy MCU będzie chciał coś jeszcze zrobić ,

np. pomiar temperatury, to w tym momencie nastąpią spore opóźnienia w odsyłaniu odpowiedzi

na zapytania z przeglądarki i komunikacja może być błędna. Na szczęście ARM pozwala nam

na dużo optymalniejsze i lepsze rozwiązanie tego „problemu” dzięki użyciu (ręcznej) obsługi

przerwania z ENC informującego że otrzymaliśmy pakiet. Dzięki czemu nasza strona w języku HTML

też będzie mogła być podrasowana :)

Opis zmian w kodzie :

Zmiany będą konieczne, i dosyć daleko idące , ale jak się szybko okaże będzie to też bardzo

proste mimo groźnego brzmienia. Zaczynamy więc zabawę :)

Jak już zapewne się domyślacie musimy zainicjować pin INT w naszym ENC28J60, użyjemy w tym celu

pinu PA3 ustawionego jako wejście „pływające”. A zatem nasze ENC będzie używać pinów:

PA3, 4, 5, 6, 7 :)  Nasz „kot” po zmianie powinien wyglądać tak:

Jednak to nie wszystko, aby nam zadziałało prawidłowo musimy jeszcze ustawić odpowiednio kontroler przerwań NVIC, a robimy to następująco:

Prawda że proste ??  ale to nie wszystko …

Teraz musimy pomieszać w pliku stm32f10x_it.c bowiem musimy obsługę naszej ENC

wrzucić do przerwania , a w tym pliku będzie najlepiej to zrobić.  Zatem  do dzieła :

Wrzucamy następujący kod do pliku:

Hmmm powstawialiśmy i pewnie paru maniaków już kompiluje kod a tu co ??

ZONK  !!!   Dlaczego ??  Hehehe, nieuważnie jednak wklepujecie :)

A ja dla hecy zmieniłem sobie nazwę funkcji  simple_server_function()  :)  Hehehe, mam was

co z tym zrobić ??  Musicie poczekać bo strasznie namieszałem i poza błędami macie jeszcze

całe stado warningów :)


Minęło paręset cykli zegarowych …. 


No dobra nie będę was już trzymał w niepewności dłużej ….

Jak już wiecie zmieniłem sobie nazwę funkcji  simple_server_function() na ENC28J60_ExtiH()

tym samym narobiłem sporo zamieszania w kodzie i dodatkowo ciało oryginalnej funkcji też zmieniłem

na bardziej optymalne bowiem mało profesjonalnie to wyglądało a zwłaszcza mnie raziło to GOTO.

Niemniej najważniejsze jest by operacja się wykonywała tak długo dopóki jest coś

w buforze odbiorczym. Zatem ciało funkcji wygląda po optymalizacji następująco:

ooo zaś coś pododawałem do kodu … hehehe … będzie zabawa co :) i zaś musicie 

poczekać kilka cykli :)


Kilka cykli i Pingów później 


Jak widzicie dodałem  sobie sterowanie diodą LED3, w sumie tak dla zobrazowania działania naszego

przerwania taki mały Optical_Debuger_Sesion :)  LED3 miga sobie podczas przetwarzania pakietu.

Natomiast LED4 ma tą samą funkcję co poprzednio i jest kontrolowana z poziomu przeglądarki WWW.

Na koniec tak to wygląda na PC :

W moim przypadku wywołanie :  192.168.0.3/LED4  , ale u was może być inne IP.

Free Image Hosting at www.ImageShack.us

Jak skomplikowane strony internetowe możemy zrobić w naszym serwerku ? 

 

Jak widzisz w kodzie nasza strona jest bardzo prosta i nie zawiera żadnej grafiki. W zasadzie

to tylko stanowi obraz dla działania serwera WWW.  Jednak nic nie stoi na przeszkodzie

by podrasować naszą stronę , dodać przyciski , grafikę i takie tam wodotryski. Strona jest pisana

w czystym HTML więc tu nie powinno być żadnego problemu, a dla nie wtajemniczonych

jest wiele kursów HTML na internecie. Musimy jednak pamiętać że nasz MCU ma ograniczone

zasoby więc nie przesadzajmy z rozmiarem grafiki umieszczanej w RAM.

Na zakończenie :

Myślę że opis jak zrobić mały serwer WWW z Dyskoteką w środku podparty na ENC  dobiegł końca,

jak wiadomo kiedyś koniec musi nastąpić … Niemniej zawarte tu informacje i opisy , powinny

pomóc wam w okiełznaniu tematu TCP/IP oraz działaniu serwera WWW no dobra … badziewia WWW.

Ale potraktujcie to jako bazę do wprowadzania własnych modyfikacji i rozwiązań.

Popatrzcie ile teraz nowych drzwi się otwarło , że o oknie na świat nie wspomnę :)

Teraz już na przykładzie sterowania jedną diodą możecie sterować dowolnym GPIO,

a co za tym idzie dowolnym urządzeniem, poprzez triaki , przekaźniki,  tranzystory, a nawet PWM.

Ja niebawem pokażę wam jeszcze jak używać protokołu UDP wraz z prostą aplikacją kliencką na PC.

Ale o tym może w następnym odcinku …..

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay