Das Speicherproblem Teil 2

IMG_0400Nachdem es mir gestern gelungen ist, mit einer extrem eingeschränkten Zeichentabelle 6 Zeilen des Bildschirms zu füllen, hab ich heute am Code weitergearbeitet und es geschafft, den ganzen Bildschirm zu nutzen und alle druckbaren Zeichen auch wirklich anzeigen zu können.

Bildschirmfoto 2013-06-26 um 00.28.42Ich kann jetzt also bei der momentanen Schriftgröße (8×8) insgesamt 726 Zeichen anzeigen. Schon allein diese Anzahl ist größer, als der mir zur Verfügung stehende Arbeitsspeicher. Nicht zu vergessen die insgesamt 222 Zeichen in der Schrifttabelle, die theoretisch noch mal 1776 Byte Platz belegen würden.

Um das Unmögliche möglich zu machen habe ich das Text-Rendering und die Schrifttabelle komplett überarbeitet. Ich habe nichts komprimiert, weil das Dekomprimieren auf 16 Mhz nicht schnell genug machbar gewesen wäre, aber habe mir die immerhin noch 10KB freien Speicherplatz im Flash zunutze gemacht. So wird der Font-Buffer von bislang 208 Byte auf 8 Byte reduziert – dafür gibt es eine Funktion, die diesen bei Bedarf aus Font-Daten des Flash-Speichers konstruiert. Das dauert zwar, aber in diesem Fall ist der ePaper-Bildschirm noch klar der Flaschenhals, sodass das nicht wirklich auffällt.

Für den Textpuffer habe ich mir den Speicher der Ansteuerungseinheit des Displays zunutze gemacht, welche immerhin einen Framebuffer hat, den ich zwar nicht direkt ansteuern, aber, wie letztes Mal schon gesagt, zeilenweise füttern kann. Mein Programm speichert sich also jetzt nur noch die letzte Zeile des angezeigten Textes und rendert diese, wenn sie voll ist, direkt in das Display. So kann ich eine Funktion ähnlich wie printf realisieren, welche auch mehrfach in die gleiche Zeile schreiben kann.

Wenn die letzte Zeile voll ist, bin ich leider nicht dazu in der Lage, den ganzen Text nach oben zu schieben, da das Programm schon längst vergessen hat, was in den oberen Zeilen steht. Mal sehen ob ich irgendwie den Inhalt des Framebuffers auslesen und ihn dann versetzt wieder schreiben kann.

Bildschirmfoto 2013-06-26 um 00.26.29Fazit Speicherverbrauch: Der Flash-Speicher ist bis zum Rand voll (15,5 von 16 KB). Allerdings ist dafür der RAM noch schön leer, und theoretisch müsste ich das Programm sogar, wie gestern scherzhaft angedeutet, mit einer kleineren Schrifttabelle auf den schwächeren Chip mit 256 Byte übertragen können. Dieser hat allerdings anscheinend einen Unterschied in der Übertragung und schreibt nur wirres Zeug auf das Display. Ich hab trotzdem aus Spaß auf dem größeren Chip parallel zum Text-Schreiben ein malloc(256) laufen lassen und er hatte keine Probleme, mir den Speicher zu reservieren – also sagen wir mal, ich habe theoretisch die Speicher-Hürde geschafft.

Und nur mal ganz nebenbei gesagt – Sublime Text ist episch geil. Ich wäre sonst beim Konvertieren der Schrifttabelle durchgedreht.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s