Sorry,
war wol gestern doch schon zu spät habe da ":" mit "|" verwechselt.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
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.
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
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:
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.
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
Aber das übertragen von mehreren Bildern geht immernoch nicht richtig.
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
...
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
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
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
' 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)
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
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
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.
Und bei einem Bild auf der Seite.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
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.
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
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.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo