Hallo Ich habe einen A1284p auf dem NetIo im Betrieb. Ich bastele mir dazu gerade eine "Webpage", dabei ist mir aufgefallen, dass diese unglaublich Speicher frisst. Die folgende Website (s.Anhang) benötigt 9,6% des Speichers des Atmega 1284p, wo könnte ich dort, wie Speicherplatz einsparen? Habt Ihr da ein paar Tipps für mich? Danke! Edit: Gibt es eigentlich einen pinkompatiblen MC der mehr Speicher als den A1284p hat?!?!
:
Bearbeitet durch User
Hallo, also eine gewisse Menge kannst du schon sparen, wenn alle überflüssigen Zeilenumbrüche und Tabs und Leerzeichen aus dem HTML verschwinden. Dazu gibts auch kostenlose Tools im Netz die das automatisch erledigen. Wenn du auf die Art eine "größere" Website bauen willst wirst du um zusätzlichen externen Speicher nicht herumkommen. Da gibts zwei Möglichkeiten: 1) SD-Karte + einfach am PC mit Daten zu befüllen - Aufwendiger bei der Software am µC 2) SPI-Flash + einfaches Auslesen der daten mit dem µC - zusätzliche Software nötig um die Daten vom PC über den µC in den Flash zu bekommen Sascha
Wenn ich mir das ansehe, dann könntest du versuchen, die ganzen Tabulatoren oder Leerzeichen bei den option-Tags rauszuwerfen und auch keine Zeilenumbrüche im Text zu haben. Wenn nötig kannst du die ja mit <br /> machen!
Hallo,
HTTP unterstützt GZIP-Kompression, ggf. könntest du versuchen die Seite
komprimiert an den Browser auszuliefern, Voraussetzung ist natürlich,
dass der Browser das unterstützt, wovon man bei modernen Browsern aber
ausgehen kann.
> https://en.wikipedia.org/wiki/HTTP_compression
Edit: Habs gerade mal mit 7-ZIP als GZIP gepackt. Unkomprimiert ist die
Datei knapp 17,6 KB groß, mit Komprimierung nur noch etwa 1,97KB.
Edit 2: Mit "komprimiert ausliefern" meine ich natürlich, dass die Seite
bereits komprimiert hinterlegt ist und nicht erst zur Laufzeit
komprimiert wird, das würde ja keinen Sinn machen.
Viele Grüße
Daniel
:
Bearbeitet durch User
Naja, und wenn ich mir die ganzen
1 | <option value=\"0000\">Aus %</option>" |
usw. ansehe, würde ich die (da gleich) genau einmal definieren und dann als Variablen zur Auslieferung einbauen... Gruss aus Berlin Elux
Daniel H. schrieb: > HTTP unterstützt GZIP-Kompression, ggf. könntest du versuchen die Seite > komprimiert an den Browser auszuliefern, Voraussetzung ist natürlich, > dass der Browser das unterstützt, wovon man bei modernen Browsern aber > ausgehen kann. Danke ersteinmal an Alle vorab! @Daniel, die html Seite läuft ja im Flash des MC. Wie funktioniert das mit zippen?!? Die html Seite ist ja eingebettet in C (webpage.h)? Das mit dem komprimieren habe ich gerade einmal ausprobiert, das Problem was ich hier sehe ist das die Datei ja keine reine .html Datei ist sonder eine in C eingebettete. Somit kompimiert er auch wichtige Einträge weg (Wie z.B. das " vor "<head>\r\n" ??? @Rainer, kenne mich mit html nur mäßig aus, wie meinst du das genau? Vielen Dank!
:
Bearbeitet durch User
Markus P. schrieb: > Daniel H. schrieb: >> HTTP unterstützt GZIP-Kompression, ggf. könntest du versuchen die Seite >> komprimiert an den Browser auszuliefern, Voraussetzung ist natürlich, >> dass der Browser das unterstützt, wovon man bei modernen Browsern aber >> ausgehen kann. > > Danke ersteinmal an Alle vorab! > > @Daniel, die html Seite läuft ja im Flash des MC. Wie funktioniert das > mit zippen?!? Die html Seite ist ja eingebettet in C (webpage.h)? Anstelle der Textdaten kommen einfach die Binärdaten in das C-Array, allerdings must du der Gegensite im HTTP-Header der als Antwort auf den Request gesendet wird mitteilen das die Daten gzip komprimiert kommen. Da du in deine Website vermutlich auch Live-Werte aus dem µC einbettest, kannst du die Komprimierung auch gleich wieder vergessen, denn in den komprimierten Daten lässt sich zu Laufzeit natürlich nichts mehr ändern! Sasch
Markus P. schrieb: > Edit: Gibt es eigentlich einen pinkompatiblen MC der mehr Speicher als > den A1284p hat?!?! Das sollte der größte sein, den es gibt Nutz du denn auch den EEProm vollständig (da ist noch eine kleine Reserve) und dann einfach den HTML-Code gnadenlos komprimieren
Hallo, wie Sascha schon schrieb hinterlegst du in deinem Buffer nur noch die komprimierten Binärdaten. Allerdings ist der Einwand von Sascha natürlich korrekt, wenn du zur Laufzeit controllerseitig Parameter auf der HTML-Seite anpassen möchtest bringt dir die Kompression nichts. Der Atmega1284P ist so in der Form der größte, es gäbe zwar noch Atmega256x, diese haben jedoch ein anderes Gehäuse.
>"<table class=\"tbl\" du weißt jedem table Element die gleiche Klasse zu -> Klassendefinition löschen und die styles direkt an table knüpfen > "<div id=\"content\">" sieht man auch häufig, selbe wie oben, nur den Header lassen, der überschreibt einfach alles, was nicht passt und natürlich die Tipps der vorposter
Hallo, also... Leerzeichen und das mit der Klasse verstehe ich jetz so, oder? vorher:
1 | "<table class=\"tbl\" border=\"0\">" |
2 | |
3 | "<td>"
|
4 | "<form id=\"form1\" name=\"f1\" method=\"post\" action=\"\">" |
5 | " <select name=\"INVA08\" class=\"Dropdown\" onchange= document.getElementById(\"form1\").submit()>"//size=\"3\" |
6 | " <option selected >Halogen Wohnzi.: %VA@08% </option>"
|
7 | " <option value=\"0000\">Aus %</option>" |
8 | " <option value=\"0005\"> 5 %</option>" |
nachher:
1 | "<table><td>"
|
2 | "<form id=\"form1\" name=\"f1\" method=\"post\" action=\"\">" |
3 | "<select name=\"INVA08\" class=\"Dropdown\"onchange=document.getElementById(\"form1\").submit()>"//size=\"3\" |
4 | "<option selected >Halogen Wohnzi.: %VA@08% </option>"
|
5 | "<option value=\"0000\">Aus %</option>" |
6 | "<option value=\"0005\"> 5 %</option>" |
Wie könnte ich dieses: "<option value=\"0000\">Aus %</option>" noch mit einer Variablen optimieren, so wie es Reiner O. geschrieben hat? Sorry, aber html ist nicht so mein Ding.... Danke!
Markus schrieb: > Sorry, aber html ist nicht so mein Ding.... Dann gibt es drei Möglichkeiten: - Sich damit beschäftigen - Jemanden Bezahlen der es für dich tut - Es sein lassen... Markus schrieb: > Wie könnte ich dieses Stichwort Schleife... das bringt aber eh alles nur ein paar Bytes, hast du den nun akut Platzptobleme? Dann wäre eventuell ein externer Speicher (EEPROM) zielführender.
Besorg oder schreib dir mal ein Programm, das aus einer Datei ein Stück C-Code macht. Dann kannst du das HTML ganz normal schreiben und musst dir keine C-Konstanten zusammenfummeln. Auch gzip-Kompression ist dann easy.
Mein AVR Webserver (http://stefanfrings.de/avr_io/NET-IO-Modul_v2.11.11.zip) enthält ein Perl Script, welches ein ganzes Verzeichnis voller Dateien (nicht nur HTML) in C-Arrays (incl. Inhaltsverzeichnis) übersetzt. Diese Arrays binde ich dann mittel #include in meinen Webserver ein. Allerdings löst das dein Platzproblem nicht. Dagegen würde ich Dir empfehlen, eine SD Karte zu benutzen und die http://www.mikrocontroller.net/articles/AVR_FAT32 Library zu nutzen. Du kannst damit die Dateien wahlweise Byteweise oder in 512-Byte Blöcken einlesen.
Bewertung 007 ▲ lesenswert ▼ nicht lesenswert > Mein AVR Webserver > (http://stefanfrings.de/avr_io/NET-IO-Modul_v2.11.11.zip) enthält ein > Perl Script, welches ein ganzes Verzeichnis voller Dateien (nicht nur > HTML) in C-Arrays (incl. Inhaltsverzeichnis) übersetzt. Diese Arrays > binde ich dann mittel #include in meinen Webserver ein. Neue Baustelle: Pearl. > Allerdings löst das dein Platzproblem nicht. Dagegen würde ich Dir > empfehlen, eine SD Karte zu benutzen ... Sehe ich auch so. Zum NETIO gibt es eine Zusatzplatine u. a. mit SD-Card Halter. Kompression ist aber trotzdem Pflicht, da die Übertragungszeiten auch eine Rolle spielen (können). Wenn du den Webserver von Radig bzw. ein Derivat hast, ist die SD-Card Unterstützung bereits enthalten.
> Neue Baustelle: Pearl.
Irgendeinen Script-Interpreter oder Compiler wird man dazu schon
brauchen. Ich habe Perl verwendet, weil das in allen Linux/Unix System
vorinstalliert ist und für Windows konnte ich einfach die perl.exe ins
Projektverzeichnis legen. So funktioniert das Plattformunabhängig.
Mit Boardmitteln (WinAVR, oder Atmel Toolchain) geht es nicht - hab ich
lange genug probiert. Wenn in der Tollchain eine neuere Bash Version
version drin wäre, würde es mit bash gehen.
> Kompression ist aber trotzdem Pflicht, da die > Übertragungszeiten auch eine Rolle spielen Bei meinem Webserver ist die SD Karte viel viel viel schneller, als die Ethernet Schnittstelle. Die meiste Rechenzeit geht für die Prüfsummen im IP Protokoll drauf, nicht für den Datentransfer.
Markus P. schrieb: > Die folgende Website (s.Anhang) benötigt 9,6% des Speichers des Atmega > 1284p, wo könnte ich dort, wie Speicherplatz einsparen? Weniger reinschreiben in die Datei... Es ist eine Textdatei, und die ist nunmal so gross, wie die Anzahl der Zeichen die drin stehen...
Stefanus schrieb: >> Kompression ist aber trotzdem Pflicht, da die >> Übertragungszeiten auch eine Rolle spielen > > Bei meinem Webserver ist die SD Karte viel viel viel schneller, als die > Ethernet Schnittstelle. Die meiste Rechenzeit geht für die Prüfsummen im > IP Protokoll drauf, nicht für den Datentransfer. Das mag ja soweit stimmen, allerdings stimmt seine Aussage doch trotzdem. Je besser die Daten auf der SD-Karte komprimiert sind, desto weniger Daten müssen letztlich auch über die Netzwerkschnittstelle übertragen werde, ergo desto weniger Rechenzeit fällt für die Übertragen der Daten und die Erzeugung von Prüfsummen an.
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.