Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Testy serwera HTTP na mikrokontrolerze (AVR+ENC28J60)

karolczyzycki 20 Apr 2010 14:06 8165 29
Computer Controls
  • #1
    karolczyzycki
    Level 20  
    Witam.
    Ma ktoś pomysły jakie można przeprowadzić testy serwera HTTP (AVR+ENC28J60)?
    Mianowicie, jakiś ping, tracert itd.
    Jak sprawdzić czas między zadaniem żądania a wykonaniem.
    Połączenie z internetem mam za pomocą neostrady, a serwer wystawiony jest na zewnątrz na porcie 80, poprzez dyndns.org.
    Czy takie testy są w ogóle możliwe?
    Przy ping otrzymuję:

    Code:
    Badanie avr.dyndns.tv [83.20.52.1] z użyciem 32 bajtów danych:
    

    Upłynął limit czasu żądania.
    Upłynął limit czasu żądania.
    Upłynął limit czasu żądania.
    Upłynął limit czasu żądania.

    Statystyka badania ping dla 83.20.52.1:
        Pakiety: Wysłane = 4, Odebrane = 0, Utracone = 4 (100% straty),


    a przy poleceniu tracert:

    Code:
    Trasa ˜ledzenia do avr.dyndns.tv [83.20.52.1]
    

    przewyľsza maksymalnĄ liczb© przeskok˘w 30

      1    17 ms     6 ms     5 ms  192.168.2.254
      2     5 ms     6 ms     5 ms  grr41.internetdsl.tpnet.pl [83.3.199.41]
      3    90 ms    77 ms    94 ms  lodz-ru1.idsl.tpnet.pl [213.25.2.134]
      4   128 ms   141 ms   220 ms  lodz-r2.tpnet.pl [213.25.5.209]
      5     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
      6     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
      7     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
      8     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
      9     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
     10     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
     11     *        *        *     UpˆynĄˆ limit czasu ľĄdania.
    ...

    Jeśli wpisuję w pasek adresu, adres strony, wszystko wyświetla się bez problemu.
    Ale ani ping, ani tracert nie działa.
    Czy to dnatego że używam połączenia przez dyndns?
  • Computer Controls
  • #2
    mirekk36
    Level 42  
    Tutaj panie kolego trzeba we własnym stosiku oprogramować sobie każdą warstwę stosu. Widać twój nie obsługuje ICMP albo źle obsługuje - dlatego nie masz ping'a. Niestety trzeba nieco więcej poczytać o stosie TCP, żeby umieć przynajmniej grzebać w cudzych stosach i dobierać czy też łączyć odpowiednie elementy. Wbrew pozorom nie jest to takie trudne - no ale do najłatwiejszych też nie należy bo nie można tego porównać do np komunikacji RS232 ;)
  • #3
    karolczyzycki
    Level 20  
    A poniżej wyniki testu tego samego serwera, tylko w LAN.

    tracert

    Code:
    >tracert 192.168.1.3
    

    Trasa śledzenia do Unknown-54-55-58-10-00-29.lan [192.168.1.3]
    przewyższa maksymalną liczbę przeskoków 30

      1     2 ms     2 ms     2 ms  Unknown-54-55-58-10-00-29.lan [192.168.1.3]

    Śledzenie zakończone.

    i ping:
    Code:
    >ping 192.168.1.3
    

    Badanie 192.168.1.3 z użyciem 32 bajtów danych:

    Odpowiedź z 192.168.1.3: bajtów=32 czas=16ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=2ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=16ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=2ms TTL=64

    Statystyka badania ping dla 192.168.1.3:
        Pakiety: Wysłane = 4, Odebrane = 4, Utracone = 0 (0% straty),
    Szacunkowy czas błądzenia pakietów w millisekundach:
        Minimum = 2 ms, Maksimum = 16 ms, Czas średni = 9 ms
  • #4
    ostrytomasz
    Level 23  
    To router/modem odpowiada (a w zasadzie nie odpowiada, pewnie można to skonfigurować w jego opcjach) tu na ramki ICMP Echo Request.
    Jeżeli chcesz zmierzyć czasy - uruchom firebuga pod firefoksem lub zaloguj komunikację wiresharkiem z komputera na którym uruchamiasz przeglądarkę. Nie będzie tu także różnicy jakościowej w porównaniu z testem w obrębie sieci lokalnej - zakładając że chcesz testować mikroserwer a nie łącze zewnętrzne.
    Wąpię by czas odpowiedzi był też istotnym parametrem. Zwróć raczej uwagę na stabilność pracy czy problemy w momencie gdy sieć zostanie zalana broadcastami, samo urządzenie dostanie więcej zapytań niż może w danym czasie obsłużyć, dostanie nietypowe zapytanie, jak zareaguje na zerwane połączenie (czy ma np. TCP keep-alive?).
  • #5
    karolczyzycki
    Level 20  
    Wydaje mi się że czas odpowiedzi jest istotny, jeśli chcę włączyć jakieś urządzenie to niby te 3 sek opóźnienia nic nie zmienią. Ale jeśli chciałbym czymś szybko sterować to się przyda.
    Obecnie działa świetnie.

    ostrytomasz -> w jaki sposób mogę przeprowadzić test, przy ilu połączeniach serwer się zawiesi? Na stronie mam kod "meta refresh" i odświeża mi co 1 sekundę. Stronę tą otworzyłem w kilkunastu zakładkach w przeglądarce, czyli teoretycznie każda zakładka co sekundę się łączy i sprawdza np. stan portów. Ale jest to taki trochę prymitywny sposób. Bo nie można w żaden sposób sprawdzić wyników.
    Może to zabrzmi dziwnie, ale jak można przeprowadzić atak DDOS na własny serwer? Czyli to "zalewanie broadcastami"?

    Przed nietypowym zapytaniem "chyba" jestem zabezpieczony, w sensie takim, że jeśli wpiszę adres strony głównej a po ukośniku jakiś nic nieznaczący tekst, to serwer wyświetli stronę z błędem. O takie zabezpieczenie przed " nietypowym zapytaniem" chodziło?

    Pytanie także do: mirekk36->
    Znasz dokładnie kod obsługi ENC, czy można z niego wywnioskować ile jednoczesnych połączeń mogę obsłużyć? Wydaje mi się że jedno.
    Ale można wprowadzić jakieś ograniczenie że jeśli będzie np. 10 połączeń w tym samym czasie to on już 11 nie przyjmie?

    Można np. wykorzystać zegar i napisać coś takiego w kodzie że jeśli w ciągu 2 sekund nastąpiło np. 5 zapytań, to zablokuj dostęp z danego IP na kilka minut. A po upływie określonego czasu odblokuj.
  • #7
    bubels
    Level 17  
    Kolego bawię się teraz serwerem www na atmega32 i nm7010. I czasem mam problem że przeglądarka wywala brak strony. Jak wymuszę odświeżenie to jest oki. Sądzę że problem jest z prędkością generowania tej strony.

    Jaki procek i jaki zegar wykorzystujesz?
  • Computer Controls
  • #8
    mirekk36
    Level 42  
    karolczyzycki wrote:
    Pytanie także do: mirekk36->
    Znasz dokładnie kod obsługi ENC, czy można z niego wywnioskować ile jednoczesnych połączeń mogę obsłużyć? Wydaje mi się że jedno.
    Ale można wprowadzić jakieś ograniczenie że jeśli będzie np. 10 połączeń w tym samym czasie to on już 11 nie przyjmie?

    Można np. wykorzystać zegar i napisać coś takiego w kodzie że jeśli w ciągu 2 sekund nastąpiło np. 5 zapytań, to zablokuj dostęp z danego IP na kilka minut. A po upływie określonego czasu odblokuj.


    Łoo matko ;) to brzmi mniej więcej tak jakby kolega chciał ze zwykłego odkurzacza zelmer zrobić mini stację kosmiczną.

    AVR + ENCxxx daje duże możliwości ale nie jeśli chodzi o tworzenie jakichś ogromnych serwerów HTTP. Jeśli cię takie rozwiązania interesują to najlepiej użyj komputera PC co najmniej. A jeśli ciut gorsze to jakieś procesory ARM. A jeśli mini rozwiązania HTTM z AVRkami to licz się z jednym płączeniem w danym czasie - przecież tu nie masz wielowątkowości/multitheradin'gu itp

    W ogóle zapomnij o wielu połączeniach w jednym czasie a z drugiej strony zastanów się co to znaczy wiele połączeń w jednym czasie?????? bo zwykle brak zrozumienia tego mechanizmu nastręcza początkującym wiele problemów.

    Poczytaj sobie zresztą ten temat:

    https://www.elektroda.pl/rtvforum/topic1644963-30.html

    a szczególnie jego końcówkę gdzie trwają dziwne spory o możliwości AVR. Są duże ale nie dla stawiania mega serwerów http.

    Za to można milion innych ciekawych rzeczy robić.

    A na zakończenie - nawet i serwer http na zwykłym AVRku będzie chodził ładnie pomimo tego "twojego jednego połączenia w danym czasie" ponieważ prawie nigdy nie dojdzie do sytuacji, żeby twój serwerek na AVR był odwiedzany przez tysiące ludzi co mogłoby ew zaowocować ciągłym atakowaniem serwera i oczekiwaniem i niewyrabianiem się.

    Zastanów się na samym początku co chcesz osiągnąć, wyznacz dokładne cele i założenia a potem konstruuj a nie odwrotnie.

    Jeszcze raz przypomnę - bardzo fajny stosik jest w wykonaniu kolegi z niemiec Ulrich Radig, zassaj go sobie - odpal stronkę, która nawet GIFY!!!!!! pokazuje ;) i spróbuj sobie dostawać się do nie z kilku kompów a zobaczysz, że nie będzie większych problemów.
  • #9
    karolczyzycki
    Level 20  
    Ledwo co zaczynam rozumieć tą całą obsługę ENC, czytając w języku angielskim a Ty mi proponujesz jeszcze niemiecki :)
    Tak jak zabrałem się za studiowanie noty ENC i kolejne świetne projekty ze strony tuxgraphics.org, tak pewnie zabiorę się także kolejne rozwiązania.
    Cel był, proste sterowanie włącz/wyłącz i został osiągnięty, na potrzeby pracy dypl.
    Pytam jak mogę przeprowadzić testy tego AVR+ENC, bo muszę mieć jakieś liczby, dane itd. Żeby to pokazać obiektywnie. Czyli jakie ma zalety i jakie wady.
    A tak dla własnych potrzeb próbuję udoskonalić układ żeby był jeszcze bardziej użyteczny. Może po moich opisach problemów można wnioskować że buduję jakiś "statek kosmiczny", ale to tylko ma być tylko serwerek sterowany przez WWW + obsługa kilku innych AVR'ków poprzez moduły 433MHz.
  • #10
    utak3r
    Level 25  
    karolczyzycki wrote:
    Cel był, proste sterowanie włącz/wyłącz i został osiągnięty, na potrzeby pracy dypl.


    I tutaj znowu stajemy przed tym samym problemem, co zwykle... po kiego Ci serwer WWW do tego? Znacznie łatwiej byłoby stworzyć do tego celu jakąś włąsną malutką aplikację, komunikującą się przez UDP z tymi modułami... Nie dość, że łatwiej, to jeszcze czas reakcji kontrolerów byłby nieporównywalnie krótszy.
  • #11
    mirekk36
    Level 42  
    UDP daje duże możliwości, a co do obiektywnych możliwości ENCxxxx to ich nie ma ;) ..... one zależą od programisty

    Stronka którą ci podaję wcale nie jest tylko po niemiecku, spokojnie koledzy z niemiec zwykle posługują się angielskim jak swoim własnym i w tymże angielskim języku znajdziesz opisy na stronie ;)
  • #12
    karolczyzycki
    Level 20  
    Quote:
    I tutaj znowu stajemy przed tym samym problemem, co zwykle... po kiego Ci serwer WWW do tego?


    Miało być sterowanie włącz/wyłącz, ale takie powiedzmy z każdego miejsca na świecie, bez używania żadnych aplikacji, następnie pomysł ze sterowaniem za pomocą przeglądarki z telefonu komórkowego, później jeszcze doszedł pomysł wpisywanie tekstu w oknie przeglądarki i wyświetlanie go na LCD, oraz kilka innych udoskonaleń. UDP nie ma potwierdzenia, a to pewnie z czasem byłoby jednak przydatne.
    Pewnie że mogłem zacząć z UDP, ale na początku nic o tym nie wiedziałem, a zobaczyłem przykładowe projekty web-serwerków i od razu mnie to zainteresowało.
    Wiem że zrobiłem to w złej kolejności, bo najpierw zbudowałem serwer, bez dostatecznej wiedzy, ale wydaje mi się, że nie trzeba wiedzieć WSZYSTKIEGO, żeby coś użytecznego zbudować. Owszem pewnie pełna wiedza na temat tych wszystkich protokołów o wiele ułatwia sprawę, ale nie jest to KONIECZNE. A zawsze takie projekty czegoś i tak nauczą.
  • #13
    mirekk36
    Level 42  
    karolczyzycki wrote:
    A zawsze takie projekty czegoś i tak nauczą.


    Pewnie to jest duża zaleta - można się dużo nauczyć. Natomiast chcę tylko zwrócić twoją uwagę na założenia. Właśnie jeśli chcesz zrobić serwerek żeby coś sobie włączać nawet telefonem komórkowym przez przeglądarkę czy wyświetlać coś na LCD - to tylko zwróć uwagę, że nie trzeba zaraz myśleć o tym ile to naraz połączeń może obsłużyć ;) czy chcesz to zrobić dla milonów osób naraz ? ;)

    Chyba nie - chcesz pokazać komuś czy udowodnić samemu sobie że tak po prostu można. A że czasem jakiś znajomy wejdzie któremu o tym powiesz to też nic się nie stanie - znajomy się pobawi i wyjdzie

    Po prostu trzeba widzieć co do czego i jak wykorzystywać.

    A jak chcesz jednak zrobić prezentację jakichś wyników swojego urządzenia przez HTTP jednak dla miliona osób na świecie to wyślij że te informacje przez http/php na jakiś serwer www i tam już normalnie działająca stronka wszystko pokaże. Tylko jakiś pośredniczące małe skrypciki php sobie napiszesz
  • #14
    karolczyzycki
    Level 20  
    Witam ponownie.
    Podczas testu serwera Atmaga32 + ENC28j60 w sieci lokalnej.
    Ping daje mi taki wynik:

    Code:
    C:\Documents and Settings\Karol>ping 192.168.1.3 -n 100
    

    Badanie 192.168.1.3 z użyciem 32 bajtów danych:

    Odpowiedź z 192.168.1.3: bajtów=32 czas=122ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=18ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas<1 ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=109ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=5ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas<1 ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=98ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas<1 ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=189ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=85ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas<1 ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=176ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=72ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas<1 ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=164ms TTL=64
    Odpowiedź z 192.168.1.3: bajtów=32 czas=60ms TTL=64

    (...)

    Statystyka badania ping dla 192.168.1.3:
        Pakiety: Wysłane = 100, Odebrane = 100, Utracone = 0 (0% straty),
    Szacunkowy czas błądzenia pakietów w millisekundach:
        Minimum = 0 ms, Maksimum = 198 ms, Czas średni = 68 ms


    1. Od czego to zależy? takie regularne opóźnienia i przyspieszenia?
    2. Czy to w ogóle możliwe czas poniżej 1ms?
  • #15
    mirekk36
    Level 42  
    he ;) pewnie że możliwe poniżej 1ms a czemu miałoby nie być możliwe? To to bardzo szybkie medium jako nośnik informacji, pakietów itp. Własnie dzięki temu można takie duże transfery osiągać - no ale to inna bajka.

    Czemu natomiast masz co chwilę większe czasy niż 1ms ????

    No a co tu można powiedzieć skoro nie wiadomo jaki masz stos TCP? jak to oprogramowałeś? jakim kwarcem w ogóle napędzasz procka ???

    To jest normalne i może zależeć od wielu właśnie takich rzeczy.

    A że są regularne - to siadczy tylko o tym, że sporo czasu musi upłynąć w twoim procku pomiędzy odpowiedziami na ping.
  • #16
    karolczyzycki
    Level 20  
    mirekk36 ->
    Procek: ATmega32
    Oprogramowanie stosu TCP/IP: z tuxgraphics.org (C)
    Kwarc: ATmega (16MHz), ENC (25Mhz)
    Jest to serwerek do pracy dyplomowej i zastanawiam się jak wytłumaczyć takie regularne opóźnienia, bo przy 200 "pingach" to na wykresie jest bardzo dobrze widoczne
  • #17
    utak3r
    Level 25  
    Bardzo prosto: serwerek potrzebuje sporo czasu na odpowiedź i potem posprzątanie po sobie i powrót do stanu gotowości. Na tyle dużo, że następny ping przychodzi, gdy jeszcze nie "odpoczął" po poprzednim.
  • #18
    karolczyzycki
    Level 20  
    Witam.

    Do zbudowania serwerka na ATM32 i ENC używam kodów ze strony: http://tuxgraphics.org/electronics/
    Dokładnie używam plików: tux.zip

    Znalazłem na stronie: http://www.avrportal.com/?page=avrnet
    podobny projekt, avrnet-v0.9-20070529.zip, zastanawiam się czym się różnią kody stosu?

    Czy ten stos to tylko kod w plikach enc28j60.c?

    W moim projekcie wykorzystuje ATM32 16MHz ENC28J60 25MHz mam ten cały buforek dostosowujący poziomy napięć.
    Patrząc po innych projektach wydaje mi się że można "więcej wyciągnąć" z tego serwerka, inni wyświetlają więcej tekstu na stronie, np. cała lista danych z temperaturą z całego dnia itd. w moim przypadku te kilka dziesiąt wyrazów to co mam to max, jeśli wpisze jeszcze jakiś tekst to serwer się "wywala".
    Nie wiem czy to problem z kodem czy to już po prostu przerasta możliwości tego stosu, szukać błędu czy po prostu tak musi być.
    W jaki sposób sprawdzić ograniczenie jest w kodzie wysyłanym na stronę, a ile ja wysyłam w moim projekcie?
  • #19
    mirekk36
    Level 42  
    karolczyzycki wrote:

    Czy ten stos to tylko kod w plikach enc28j60.c?


    Panie kolego - ten plik wraz z odpowiednikiem *.h - to stanowią TYLKO niejako drivery sprzętowe do karty sieciowej jeśli chodzi o stos TCP. Za pomocą podobnego pliku można podłączyć do stosu np kartę sieciową opartą np o układ RTLxxx lub inną - tylko trzeba mieć te pliki i ew przykłady jak implementować je w danym stosie jeśli to możliwe.

    W przypadku AVRnet pliki stosu to: icmp.* , ip.* , http.* itd


    Czym się różnią stosy z tych 2 źródeł ?

    Nie chcę się upierać ale dla mnie z tych 2 zdecydowanie lepszy jest ten ze stronki tuxgraphics.
  • #20
    karolczyzycki
    Level 20  
    Czyli powiedzmy że używam tego lepszego, a jednak stronka jaką mogę wyświetlić jest mniejsza, niż to co tuxgraphics robi na tym samym stosie.
    Używam ich plików, ale zmieniłem main.c dla własnych potrzeb.
    Zamieszczę plik main, jeśli ktoś potrafi stwierdzić co jest nie tak to proszę o pomoc. Nie wiem czy ten mój kod przekracza maksymalny rozmiar strony i to normalne zjawisko, czy coś źle inicjalizuję.
    Zamieszczony w załączniku kod działa prawidłowo, ale jeśli dopiszę np.:
    Code:
    plen=fill_tcp_data_p(buf,plen,PSTR("<b>abcdefghijklnmoprstuwxyz</b>"));   
    
    plen=fill_tcp_data_p(buf,plen,PSTR("<b>abcdefghijklnmoprstuwxyz</b>"));   
    plen=fill_tcp_data_p(buf,plen,PSTR("<b>abcdefghijklnmoprstuwxyz</b>"));   
    plen=fill_tcp_data_p(buf,plen,PSTR("<b>abcdefghijklnmoprstuwxyz</b>"));   
    plen=fill_tcp_data_p(buf,plen,PSTR("<b>abcdefghijklnmoprstuwxyz</b>"));   

    to wszystko się wiesza.
    Czy może przy zmianie avrka z takiego z 1Kb SMRAu na 2Kb powinienem zmieniać wilelkość buforu w kodzie?

    Czy stos z tej stronki będzie lepszy?http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex
    Niemieckiego nie znam, ale widzę że na ENC i ATM32 i ma chyba gify nawet...
  • #21
    mirekk36
    Level 42  
    Poczekaj , może ja się nieprecyzyjnie wyraziłem, więc powtórzę. Ja dlatego uważam, że stos z tux jest lepszy bo zawiera choćby obsługę SNTP której nie ma w drugim, lepszą wg mnie obsługę UDP , poza tym posiada bardzo ważną rzecz jak przygotowaną obsługę client/serwer dzięki której możemy przesyłać swoje dane na jakiś NORMALNY serwer web na którym to z kolei może stać sobie potężna strona www z dowolną ilością grafik, tekstu czy filmów (w zależności od hostingu) ..... i ja jeśli mówię o pokazywaniu czegoś przez www to tylko w takiej opcji a nie stawianiu serwera http na AVRku.

    Ale też bawiłem się i serwerkiem na AVR. Niestety do takich prostych testów nie potrzebowałem nawet więcej niż to jest w przykładzie wyświetlać swoich jakichś tam danych na stronce - więc nawet nie pamiętam już jak to się dokładnie obsługuje...

    tak sobie tylko myślę na szybko czy tam nie da rady podzielić wysłania większej ilości danych na że tak powiem raty... zamiast tylko poprzez zwiększanie bufora.

    Jak widzisz w tym stosie cała idea sprowadza się do używania jednego wspólnego bufora odbiorczo nadawczego i to oczywiście w podstawowej wersji limituje bardzo wielkość przesyłanych ramek. Ten stos nie został stworzony do przesyłania ogromnie długich ramek ;) chociaż ramka 8kB to normalna ramka - ale tu autorzy postarali się właśnie aby była odwrotna możliwość. Kosztem zmniejszenia ramki żeby można było obsłużyć stos nawet z ATmega88 !!! ....

    Reasumując albo popatrz sobie czy da radę wysłać twoją większą stronkę (tzn jej zawartość) w kawałkach albo jeśli to twój główny i jedyny priorytet a inne sprawy nie są dla ciebie istotne w tym projekcie a za pomocą AVRnet udaje ci się prosto wysyłać większe strony - to skorzystaj z tego drugiego - w czym problem ???
  • #22
    karolczyzycki
    Level 20  
    Sprawdzę ten stos, docelowo chcę zrobić obsługę większej ilości wyjść, w moim kodzie jeśli wpiszę jeszcze sterowanie 4 portami to już to jest za dużo dla strony.
    A jakie są inne sprawy, chodzi o używanie tego na innych mniejszych scalakach?
    To chyba jest tak że albo wyśle albo nie, a mogę sobie zwiększyć wielkość ramki w kodzie z Tuxgraphics?
  • #23
    mirekk36
    Level 42  
    No "inne sprawy" to miałem na myśli te dodatkowe fiuczersy dobrze oprogramowane w stosie z TUX.

    Pewnie że możesz zwiększyć ale poprzez zwiększanie tego bufora lub jak mówiłem zastosować jakieś dynamiczne przesyłanie w mniejszych kawałkach no ale tu zaczynamy już powoli iść w stronę prawie "sliding windows" ;) ... co przy tak małych prockach troszkę mija się z celem - za mało RAM'u
  • #24
    karolczyzycki
    Level 20  
    Czyli do wyciśnięcia wszystkiego z ENC bez tych "sliding windows" wystarczy zmienić atmegę na 644? albo dodać zewnętrzną pamięć SRAM?
    Jaka maksymalna wielkość pamięci będzie dobra? tzn gdzie jest granica, po której przekroczeniu zwiększenie pamięci nic nie da?
  • #25
    mirekk36
    Level 42  
    Każde zwiększenie pamięci RAM zawsze ci da dużo - no ale próba przechowywania takich rozbudowanych stron na takich prockach o tyle nie ma sensu, że niewspółmiernie do korzyści w postaci większych stron, wydłuży ci się czas obsługi klientów.

    Tak ATmega644 to już sporo lepszy wariant ;) można zrobić więcej.

    Ale jak już pisałem wcześniej postaraj się kiedyś zrobić komunikację clinet/server i tą swoją stronkę umieszczać na jakimś normalnym hostingowanym miejscu ;) ... a komunikacja w dwie strony to już tylko stworzenie albo skryptów CGI albo PHP ... ja akurat bawiłem się z PHP bo go toroszkę znam a CGI w ogóle.

    Poza tym jeśli robisz serwer http ale dostępny dla usrów z internetu to jeste pewna sztuczka ;) którą można zastosować, żeby na swojej stronce widocznej z AVR'ka było widać nawet sporych rozmiarów GIF'y czy inne JPGi ;)
  • #26
    karolczyzycki
    Level 20  
    Ja chcę zrobić proste menu z podstronami do sterowania wyjściami, odczytem temp.
    A aktualnie jeśli zrobić obsługę 4 portów to działą, ale jeśli na stronie chce wyświetlić informację do 12 portów to już tekstu jest za dużo.
    A można powiedzieć że nie używam HTMLa tyko wszystko wyświetlam jako text jak użyję pre to mogę wyświetlić więcej.
    Jak sprawdzić ilę mogę wysłać max na tym stosie z tuxgraphics przy 2Kb pamięci, a ile ma moja strona?
  • #27
    karolczyzycki
    Level 20  
    Witam,
    Zabrałem się ponownie za serwer HTTP opisany powyżej, postanowiłem wstawić zamiast ATmegi32 - 644, mam w związku z tym pytanie:
    Czy dużo jest "roboty" żeby "przesiąść" się z 32 na 644 oprócz zmiany w makefile'u? czy w tej 644 są inne nazwy rejestrów? Po próbie kompilacji otrzymałem taki wynik:
    Code:
    In file included from ../main.c:7:
    
    c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warnin
    g "This header file is obsolete.  Use <avr/interrupt.h>."
    ../main.c: In function 'init_cnt2':
    ../main.c:780: error: 'TCCR2' undeclared (first use in this function)
    ../main.c:780: error: (Each undeclared identifier is reported only once
    ../main.c:780: error: for each function it appears in.)
    ../main.c:783: error: 'OCR2' undeclared (first use in this function)
    ../main.c: In function 'main':
    ../main.c:801: warning: implicit declaration of function 'waitms'
    ../main.c:854: error: 'TIMSK' undeclared (first use in this function)
    make: *** [main.o] Error 1
  • #28
    mirekk36
    Level 42  
    karolczyzycki --> tak, jest właśnie kilka różnic w rejestrach i obsłudze timerów (zmiana na lepsze ;) ) stąd te błędy. Wystarczy otworzyć sobie dwie noty PDF i porównać i zmienić nazwy. Na prawdę nie sprawi ci to aż tak dużo kłopotu.
  • #30
    karolczyzycki
    Level 20  
    Zmieniłem nazwy rejestrów dla ATmegi644.
    Wcześniej bez tych zmian nie mogłem kompilować kodu, po wprowadzeniu tylko tych 4 zmian kod już mogę kompilować ale serwer nie działa (nie inicjuje się wyświetlacz ani ENC.)
    Najpierw to:
    Code:
    void init_cnt2(void)
    
       {
        cnt2step=0;
        odczyt=0;
                    //TCCR2 = 0x00; //stop // dla 32
        TCCR2A = 0x00; //stop // dla 644
        ASSR  = 0x00; //set async mode
        TCNT2 = 0x64; //setup
                    // OCR2  = 0x9C; // dla 32
        OCR2A  = 0x9C;  // dla 644
                    //TCCR2 = 0x07; //start  // dla 32
        TCCR2A = 0x07; //start  // dla 644
        }

    i jeszcze takie coś w kolejnej fukncji:

    Code:
          //TIMSK = 0x40;// dla 32
    
          TIMSK2 = 0x40;  // dla 644




    Czy oprócz zmian rejestrów i ATmegi z 32 na 644 (w makefilu) muszę zmieniać coś jeszcze?
    Kompilacja przebiega bez błędów więc problem jest teraz gdzieś indziej, jaki kawałek kodu tu zamieścić? Może ktoś się zorientuje co jest nie tak.
    Zmienię powyższe linijki kodu (na 32) i ATmega32 rusza...