mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String-Konstante zu gross für Flash (ATMega 168)


Autor: Karsten Donat (karstendonat)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Willi Wacker (williwacker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karsten Donat (karstendonat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
char HTML_Header[] PROGMEM =
   "HTTP/1.1 200 OK" "\x0D\x0A"
   "Server: WHZ Pendel (Atmel)" "\x0D\x0A"
    "\x0D\x0A";

oder
#define CRLF "\x0D\x0A" //(Standard.h oder auch direkt im .c)
char HTML_Header[] PROGMEM =     //(.c)
   "HTTP/1.1 200 OK" CRLF
   "Server: WHZ Pendel (Atmel)" CRLF
    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

Autor: nop(); (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Probleme kenn ich. Nachdem ich's in ASM neu geschrieben hab ging's 
alles rein.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.