Speicherplatzreduzierung Atmega 1284p Webpage

OP #3472508
Lesenswert?

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?!?!
Angehängte Dateien:
#3472584
Lesenswert?

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
(Firma: keine) #3472602
Lesenswert?

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
OP #3473154
Lesenswert?

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!
#3473219
Lesenswert?

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
Gast #3473287
Lesenswert?

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
(Firma: keine) #3473301
Lesenswert?

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.
Gast #3473310
Lesenswert?

>"<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
Gast #3474337
Lesenswert?

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!
Persönliche Seite #3474476
Lesenswert?

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.
Gast #3474496
Lesenswert?

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.
Gast #3474515
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.

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.
Gast #3474754
Lesenswert?

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.
Gast #3475637
Lesenswert?

> 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.
Gast #3475639
Lesenswert?

> 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.
Gast #3475664
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren