Das Speicherproblem

IMG_0397Ich hab mir für die lernfreie Zeit mal ein neues Gadget gegönnt, nämlich ein TI LaunchPad (das ist ein Programmierboard für Embedded-Chips) und dazu ein richtig cooles ePaper-Display. Warum? Weil ePaper geil ist. Ich mag diese Technik und ich denke mal dass da noch was richtig großes draus werden kann.

Mit so einem Ding bewegt man sich programmiertechnisch so weit Low Level, noch einen Schritt weiter runter und man hängt am Assembler-Code. Das heißt abgespeckte C Library, wenig Speicher, Interrupts, Vektoren und vieles mehr. Man muss dem Compiler sogar sagen, wo er einzelne Funktionen hinkompilieren soll, denn der Chip führt bei einem Interrupt einfach eine feste Speicheradresse aus.

Und das macht tatsächlich Spaß und man lernt, wie man beim Programmieren richtig den Speicher und die CPU schont, schließlich arbeitet der Chip mit 16 MHz. Einen gnädigen Flash-Speicher von 16KB gibt’s auch noch – es passiert also gerne mal dass das fertige Programm gar nicht mehr auf den Chip passt. Noch härter hat’s den RAM erwischt – ich hab 512 Byte zur Verfügung. Das heißt ein malloc(512) und der Speicher ist voll.

Und hier liegt die Herausforderung, vor die ich mich hartnäckigerweise gestellt habe. Das 2,7″ ePaper-Display ist monochrom und hat eine Auflösung von 264×176 Pixeln. Wenn ich pro Bit eine Information speichere, liegt mein Speicherverbrauch bei ca. 5,8 KB. Tja, zu groß.

Also ist nix mit Bildschirmpuffer, und es wird noch böser, denn der Bildschirm will sein Futter zeilenweise haben, also ist auch nix mit einer setPixel()-Funktion. printf gibt’s natürlich auch nicht – noch nicht einmal eine Schriftart. Für das Display wird eine GFX-Library angeboten, mit welcher man Kreise und Text zeichnen kann – diese sprengt auf meinem Chip (MSP430G2553) sowohl bei RAM als auch Flash jeden Rahmen. Für diese Bildschirmgröße soll die nicht einmal auf einem Arduino Mega laufen.

Bildschirmfoto 2013-06-25 um 02.02.21Also macht man’s eben selbst. Mein Programm benutzt einen Textpuffer für insgesamt 198 Zeichen, einen Zeilenpuffer für die momentan bearbeitete Zeile und eine 6×8 Bitmap-Schrift-Tabelle mit 26 Zeichen. Damit ist der Speicher dann auch voll. Nach viel Verzweiflung und Herumgefrickel kann ich jetzt tatsächlich Buchstaben wie oben im Bild anzeigen.

Ich muss das bei Zeit noch mal ausbauen, denn wie man sieht ist es noch nicht wirklich gut. Ich bin in der Lage ca. 30% des Bildschirms auszunutzen und habe gerade mal alle Großbuchstaben und ein Leerzeichen zur Auswahl. Bill Gates hat mal gesagt dass 640 KB RAM für immer ausreichen sollten, und ich bin mir sicher dass ich diese 512 Byte RAM noch zu Höchstleistungen überreden kann. Und dann portiere ich das auf den anderen Chip mit 256 Byte RAM, der hier auch noch irgendwo rumfliegt (auf den passt die Schrifttabelle nur knapp drauf…) 😉

Ich werde da noch mal drüber berichten, wenn ich den Code „optimiert“ hab. Wenn ich bedenke wie viele unserer Haushaltsgeräte solche Embedded-Chips beinhalten, ist es wahrscheinlich gar keine schlechte Idee, sich damit auseinanderzusetzen. Es gibt auch weder frustrierte User noch schlechte App Store Bewertungen oder sinnlose Feature-Wünsche! 🙂

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