Hi, ich hab einen WebServer in den ATMega 168 gequätscht. Jetzt möchte ich den Rumpf der index.html im Flash ablegen. Es sind auch schon andere Strings im Flash (LCD, UART...). Das Problem ist, dass der ATMega nicht mehr arbeitet wenn die Konstante zu grß wird. Die Grenze ist auch nicht ganz fest. Nachdem ich gerade einen SRAM String noch aufs Flash beschränkt hab ist die Grenze etwas gesunken. Dann hab ich andere Codeteile mit Flash-Strings wieder reingenommen und die Grenze ist gestiegen. (der String liegt in der config.cpp bzw. tcp.cpp am Ende) Hab sicher nur irgend nen einfachen Fehler gemacht ;-) Und außerdem ist mir aufgefallen, das mir die size Funktion immer Gerate Byte-Werte ausgibt. Also wenn ich teilweise 1 Byte extra in eine Konstante pack ändert sich an der berechneten Größe nichts. Ciao Karsten ATMega IDE 2007: www.karstendonat.de/avr
Beim nächsten Byte wächst die Größe um 2, das nennt man dann wortweise Orientierung, optimiert für die Befehlsstruktur des AVR, jeder Befehl 1 oder 2 Worte. Aber zu Deinem Flash: Dein Speicher hat 16k, das ist für einen Web-Server, wenn Du auch noch Dateiheader und - ich vermute - andere längere Sachen ablegen willst, Code wirst Du auch haben wollen, nicht viel. Hast Du mal an ein Serielles EEPROM gedacht. Die sind einigermaßen preiswert zu haben und auch leicht via SPI anzusprechen. Dein AVR hat entsprechende Ports. By the way: Du hast auch noch 512 Bytes EEPROM (512?). Könntest Du auch nutzen, hätte den Vorteil, dass Du das EEPROM einfach mitprogrammieren kannst. Ciao Willi
Ich bin aber erst bei 8-10kB im Flash. Es kommt nur eine Index Seite rein. (1,5kB) Der Rest läuft über ein Text File was live aus den Daten generiert wird. Für den Web Server brauch ich bisher 2,5kB (ARP, Ping, IP, TCP, HTML). Da kommt noch ein kleinwenig dazu weil die TCP Verbindung noch nicht sauber ist. Den internen EEPRom brauch ich schon für die Daten die er sammelt. Die passen nicht so richtig in den RAM. Zumindest nicht genug. Da die aber nur etwa 120 Bytes/ Tag sind, sollte das mit nem Zyklischen Puffer auch paar Jahre lang laufen. Ich hab das Ganze noch etwas eingegrenzt, sobald ein CRLF im String ist gehts nicht. Liegt also erstmal nicht an der Länge. Dabei ist egal ob ich z.B.
1 | char HTML_Header[] PROGMEM = |
2 | "HTTP/1.1 200 OK" "\x0D\x0A" |
3 | "Server: WHZ Pendel (Atmel)" "\x0D\x0A" |
4 | "\x0D\x0A"; |
oder
1 | #define CRLF "\x0D\x0A" //(Standard.h oder auch direkt im .c)
|
2 | char HTML_Header[] PROGMEM = //(.c) |
3 | "HTTP/1.1 200 OK" CRLF |
4 | "Server: WHZ Pendel (Atmel)" CRLF |
5 | CRLF; |
schreib. Lass ich die CRLF weg gehts, nur die Browser mögen das ja dann gar nicht ;-) In die hex Datei schreibt er korrekt 0D 0A rein. Wenn er startet beginnt er mit dem LCD wo er aber nur Strings ohne CRLF anzeigt. Danach kommt erst der WebServer mit seinen Zeilenumbrüchen. Nur mit den CRLF drinne zeigt er nichtmal die Begrüßung auf dem LCD. Bei einem Kaltstart sieht man auch das er das LCD nicht mal resetted. Ciao Karsten
Die Probleme kenn ich. Nachdem ich's in ASM neu geschrieben hab ging's alles rein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.