Seite 9 von 10

Re: mini WEB-Server (alt mini FTP)

Verfasst: Do 30. Aug 2012, 15:01
von PIC18F2550
Sorry,
war wol gestern doch schon zu spät habe da ":" mit "|" verwechselt. :shock:

Re: mini WEB-Server (alt mini FTP)

Verfasst: Do 30. Aug 2012, 16:23
von PIC18F2550
Solangsam gehen mir die Ideen aus warum der Webserver Spinnt.
Am ENC kannes nicht liegen habe verschiedene auspropiert und bei meinem PIC-mini-Web fünktionierts.
Ich habe mal den MCHPStack402 als zip angehangen den verwende ich so wie er ist auf dem PIC.
Leider ist mein C nicht sehr gut so das es bei einer umsetzung nicht funktionieren wird aber vileicht erkennt jemand von euch warum das der Webserver auf dem Prop nicht geht.
MCHPStack402.zip
(3.68 MiB) 638-mal heruntergeladen
proptcp-5.0-7beta.zip
(33.46 KiB) 634-mal heruntergeladen

Re: mini WEB-Server (alt mini FTP)

Verfasst: Fr 31. Aug 2012, 02:20
von kuroneko
Nur um mal die ueblichen Kandidaten abzuklopfen, koennte es ein Stack-Problem sein? 64 longs sollten eigentlich ausreichen ... Also einfach mal den Wert erhoehen (128/256) oder den Server direkt starten:

Code: Alles auswählen

PUB main

  sock.start(1, 2, 3, 4, -1, 7, @mac_addr, @ip_addr)
  rr.start
  webserver

Re: mini WEB-Server (alt mini FTP)

Verfasst: Fr 31. Aug 2012, 09:11
von TuxFan
Hallo!
Falls der Prop nicht zur Erzeugung des 25MHz Taktes für den ENC benutzt wird, bitte die 7 (xtalout) zu -1 machen.
Gruß
TuxFan

PS.: Ich hatte in den letzten Tagen noch eine Software zum Steuern von LEDs über Ethernet (wie bei YBox2) auch mit PropTCP mit Start von 3 Socks ausprobiert. Dabei hatte ich keine Probleme festgestellt.
Meine C-Kenntnisse sind eher marginal, deswegen kann ich bei o.a. Software nicht helfen.

Re: mini WEB-Server (alt mini FTP)

Verfasst: Sa 1. Sep 2012, 00:29
von PIC18F2550
erstmal danke TuxFan.
Das mit dem (xtalout) habe ich schon gemacht.
Durch das einfügen von "repeat while \sock.txflush" habe ich jetzt einen konstanten Datenstrom ohne diese Spitzen.
Auflösung 0,25sec
Bildschirmfoto-Systemüberwachung-1.png
Aber das übertragen von mehreren Bildern geht immernoch nicht richtig.

Code: Alles auswählen

PRI webserver | sockidx
  ' Setup listening sockets
  \sock.listen(80, @tcp_webrx1, rxlen, @tcp_webtx1, txlen)
  repeat
      if \sock.isConnected                     ' is a client connected?
        if \_webThread == 0                    ' process the client connection, check for success
          \sdfat.unmountPartition
          repeat while \sock.txflush                        ' flush txbuffer
        \sock.close                            ' close socket
      \sock.relisten                           ' force socket to listen again, using the previous settings

Code: Alles auswählen

...
        a:= sdfat.fileSize
        b:= a / 512         'Blöcke von 512Byte ermitteln
        a:= a - (b * 512)   'restgröße
        repeat i from 0 to b
          sdfat.readData(@SDP, 512)
          repeat while \sock.txflush                        ' flush txbuffer
          sock.txdata(@SDP,512)
        sdfat.readData(@SDP, 512)
        repeat while \sock.txflush                        ' flush txbuffer
        sock.txdata(@SDP,a)
        return 0

Re: mini WEB-Server (alt mini FTP)

Verfasst: Sa 1. Sep 2012, 11:22
von TuxFan
Hi!
Ändere mal

Code: Alles auswählen

repeat i from 0 to b
in

Code: Alles auswählen

repeat b
im 1. Fall wird b+1 mal ein Block eingelesen und gesendet. Dann ist schon der unvollständige Block mit a-bit dabei und er bleibt beim erneuten Lesen des a-bit Blockes hängen.
im 2. Fall nur exakt b mal
Das Übertragen des a-bit Restblockes sollte nur erfolgen wenn er größer 0 ist.
Gruß
TuxFan

Re: mini WEB-Server (alt mini FTP)

Verfasst: Sa 1. Sep 2012, 11:44
von PIC18F2550
moin kuroneko,
das mit dem stack habe ich jetzt auch ausprobiert sind ja 2 drinn brachte aber keine verbesserung.

Code: Alles auswählen

'  long webstack[64]             ' stack for webserver cog
  long webstack[256]             ' stack for webserver cog

Code: Alles auswählen

'  stack         long 0[128]                               ' stack for new cog (currently ~74 longs, using 128 for expansion)
  stack         long 0[256]                               ' stack for new cog (currently ~74 longs, using 128 for expansion)

Re: mini WEB-Server (alt mini FTP)

Verfasst: Sa 1. Sep 2012, 12:04
von PIC18F2550
moin TuxFan,
habe dein Vorschlag mal auspropiert.

Code: Alles auswählen

        a:= sdfat.fileSize
        b:= a / 512         'Blöcke von 512Byte ermitteln
        a:= a - (b * 512)   'restgröße
        ser.writeString(string("Ready", $0D))
        repeat b
          sdfat.readData(@SDP, 512)
          sock.txdata(@SDP,512)
        if a>0
          sdfat.readData(@SDP, a)
          sock.txdata(@SDP,a)
        return 0
Bildschirmfoto-Systemüberwachung-2.png
Das sieht schon viel besser aus.
Nur wenn ich mit mozilla versuche das Bild auf dem Desktop zu ziehen sagr er mir.
bei mehreren Bildern auf einer Seite.
Bildschirmfoto-Namenloses Fenster.png
Und bei einem Bild auf der Seite.
Bildschirmfoto-Namenloses Fenster-1.png

Re: mini WEB-Server (alt mini FTP)

Verfasst: Sa 1. Sep 2012, 16:21
von TuxFan
Ich hatte mal Deinen o.a. Code zum Lesen und Senden in dem von mir benutzten Programm eingesetzt. Das läuft zwar, aber von 7 Bildern wurden nur 2 angezeigt. Die Bestimmung der Filelänge der Blockanzahl und der restlichen Bytes sind aber nicht zwingend notwendig. Der nachstehende Code aus dem von mir benutzten Programm ist ausreichend. Hierbei werden jetzt 6 von 7 Bildern angezeigt. Übertragungsraten von ca. 200 Kibit wurden erreicht.
Hieraus kann man sehen, das die Kürze des benutzten SPIN-Codes scheinbar eine große Rolle spielt.

Code: Alles auswählen

      repeat
        h:=sdfat.readData(@sendwebBuffer,BufferSize) ' now we are reading the first BufferSize (1024 byte) 
        if h=<0                                       ' if there are no bytes to read, then exit the loop
          quit
        else
          web.txdata(@sendwebBuffer,h)                     ' send the h bytes read (max 1024 byte)
      return 0
Gruß
TuxFan

Re: mini WEB-Server (alt mini FTP)

Verfasst: Mo 8. Okt 2012, 12:54
von PIC18F2550
Es gibt eigendlich nur zwei möglichkeiten noch.
1. im treiber zum Senden gibt es noch einen unendeckten Fehler.
2. der Listen befehl arbeitet nicht richtig oder die Empfangenen daten werden falsch ausgewertet.

Zumindest kommt er mit datenlängen unter 1,5k klar.