bei meinen etwas komplexeren Webseiten aus dem Flash traten Probleme auf. Folgende Korrekturen haben dem abgeholfen:
In translate.c:
Im Abschnitt wo die Variable WDAY ersetzt wird muss auch der Längenzähler hochgesetzt werden. Dazu wird nach der Zeile
dest += 3;
einfach noch
len +=3;
eingefügt.
In httpd.c
In der Funktion
void httpd_data_send(unsigned char index)
sollte der buffer fürs umladen aus dem Flash immer terminiert werden.
Die Schleife sollte wie folgt geändert werden:
Code: Alles auswählen
while ( len < (MTU_SIZE-(TCP_DATA_START)-100) ) {
memcpy_P(buffer, http_entry[index].new_page_pointer, sizeof(buffer)-1);
=> // Terminierung immer machen!
=> buffer[sizeof(buffer)-1] = 0;
// Datei zeilenweise lesen und vorhandene Variable ersetzen
// CRLF suchen
if ( (ptr2 = strstr_P(buffer,PSTR("\r\n"))) ) {
*(ptr2+2) = 0;
http_entry[index].new_page_pointer += (ptr2 - buffer + 2);
}
else {
=> // hier entfernt
=> //buffer[80] = 0;
http_entry[index].new_page_pointer += sizeof(buffer)-1;
}
HTTP_DEBUG("\r\n>%i|%s|<",http_entry[index].new_page_pointer,buffer);
// Ende-Marker vorhanden ?
if ( (ptr2 = strstr_P(buffer,PSTR("%END"))) ) {
HTTP_DEBUG("\r\nFlash-Dateiende.");
tcp_entry[index].app_status = 0xFFFD;
*ptr2 = 0;
}
// vorhandene Variable ersetzen
len += translate(buffer, &ptr, &srclen);
HTTP_DEBUG(" srclen: %3i; len: %i",srclen,len);
if (ptr2) // falls %END gefunden wurde -> Ende
break;
}
Stephan