Frage

Es scheint, dass jede Art von Grafik-Bibliothek wie DirectFB oder MiniGui eine Art der zugrunde liegenden Betriebssystem erfordert wie Linux oder uClinux.

Ich bin mit dem Schreiben einer Software für einen Mikrocontroller mit nur 512kb Blitz, ein LCD-Display und einen Touchscreen herausgefordert angezeigt werden und einige Bilder und GUI-Teile handhaben.

Kennen Sie eine Bibliothek, die nur einen Zeiger auf den Videospeicher benötigen, die auch Linien, Bilder und Schriften umgehen können?

War es hilfreich?

Lösung

Mit der Zeit übernehmen Sie eine dritte Partei Lösung einfach es selbst geschrieben haben könnte.

Für die meisten, wenn nicht alle Umgebungen ist der Bildschirm nur eine zweidimensionale Anordnung von Pixeln. Manchmal palettiert manchmal nicht, aber das spielt keine Rolle, können Sie schreiben Sie, wie Sie wollen.

Es gibt Unmengen von freien Code gibt für Linien und Bögen zeichnen, etc.

Der Killer kann Schriftarten sein, aber ich glaube, Sie werden feststellen, dass ein Dritter App alle Ihre Speicher kauen wird nur Schriftarten tun, sind Sie Ressource begrenzt, so dass Sie die Schriftarten im Voraus berechnen werden wollen und nur die Bits kopiert werden.

Erstellen Sie eine zweidimensionale Anordnung von Daten, tun Sie Ihrer Arbeit auf Ihrem Lieblings-Host auf dem ersten, ist es trivial Dateien speichern .bmp, wenn Sie wollen, um zu sehen, was Sie zeichnen, und trivial eine Reihe von .bmp zu drehen wenn Sie Dateien in einem Video wollen eine Aktion sehen.

Wenn Sie generische C verwenden und keine libc Anrufe (schreiben Sie Ihre eigene Memcpy, memset, etc.) dieser Code überall laufen, auf dem Host für die Entwicklung und auf das Ziel.

Schriftarten werden Ihre Killer sein, Sie müssen sie im Voraus berechnen, sondern verwalten, dass Informationen nach unten in so klein drücken wie möglich, und zur Laufzeit der Daten extrahieren und die Bits für jeden Buchstaben in dem virtuellen Bildschirm so schnell kopieren wie Sie können.

oder kaufen Sie nur eine der vielen LCD-Lösungen, die für Sie all dies tun, und Sie einfach senden Sie es Befehle wie Draw „Hallo Welt!“ irgend (x, y) als Vordergrund und Weiß als Hintergrund unter Verwendung von blau.

Im Grunde glaube ich, dass die Nicht-os-Lösungen gehen, um noch zu viele Bibliotheken zu verwenden und für Ihre spezifische Anwendung zu groß sein. 2D-Arrays von Bytes oder Pixel sind Trivial selbst zu verwalten. Auch wenn Sie eine Anwendung für eine Desktop-Plattform schreiben, würde ich es auf diese Weise tun und in der letzten Minute die vollständig renedered Bildschirmaktualisierung zu einem gewissen o abhängiger Bibliothek kopieren (ermöglicht eine maximale Portabilität von einem Betriebssystem oder nicht zu einem anderen).

Andere Tipps

Wir verwendet haben "PEG", die C ++ Version von Swellsoftware seit vielen Jahren. Es ist kommerzielle Software, nicht frei, aber die zugrunde liegenden Bildschirmtreiber können nur einen Zeiger auf Grafikspeicher verwendet werden und sie bieten viele Beispieltreiber für verschiedene Arten von Grafik-Hardware. Wir schrieben unsere eigenen Treiber (n) für unsere proprietäre Hardware, die Beispieltreiber als Referenz. Wir haben schon immer eine Art von RTOS, aber ich glaube, PEG + auch ohne Betriebssystem arbeiten kann.

es hier: http://www.swellsoftware.com/

Glück,

Wenn Ihre Anforderungen an Interaktivität und GUI-Widgets sind sehr bescheiden (oder du bist OK mit Ihrem eigenen Widgets Gestaltung), haben einen Blick auf LibGD . Zeichnen Sie das Bild, das Sie auf dem Bildschirm angezeigt werden soll, die Funktionen der Bibliothek verwendet wird, und es dann in den Rahmenpuffer schreiben mit gdImagePngToSink ().

Die wichtige Sache, die Sie besorgt sein sollen, ist die Steuerung des LCD und Touchscreen. Es gibt eine Fülle von C-Bibliotheken (nicht kostenlos) für diese Aufgabe. Eine schnelle Google hat mir diese Ergebnisse: Simplify Technologies und Ramtex .

Wenn Sie etwas Open Source finden wollen, dann von Ihrem Controller Typ starten und Embedded-Geräte-Foren suchen (auch wenn es nicht ARM ist, könnte man leicht Anschluss C-Code). Einige Vorschläge:

Auch stellen einige Kit ein SDK bieten (sowohl mit als auch ohne Linux) mit ihren Brettern. ein Brett Einkauf der Regel erhalten Sie die Lizenz, den Code zu verwenden. Suche nach Entwicklungs-Boards mit dem gleichen LCD-Controller.

Nicht kostenlos, aber gut auf niedrigen Ressourcensysteme: http://www.tat.se und ihre Produkte Kastor und Cascades. Es erfordert nur einen Zeiger auf Videospeicher, malloc und etwas, das wie ein Dateisystem aussieht. Die letzten beiden Anforderungen sind nicht unbedingt erforderlich, entweder. Kein Betriebssystem erforderlich ist.

Für den kleinsten Raum sollen Sie wirklich Ramtex betrachten. Ich habe es auf zwei Projekte mit 8-Bit-PICS verwendet. Der Raum ROM war etwa 35K in meinen Anwendungen mit ~ 1 K für RAM (Menge hängt davon ab, ob Sie RAM Pufferung für die Anzeige benötigen). ROM Raum hängt von den grafischen Funktionen, die Sie wollen oder müssen.

Sie bieten volle Quelle und der einmalige Preis ist recht gut, weniger als $ 1000 (beachten Sie, dass die Preise auf ihrer Website aufgelistet haben in Dollar konvertiert werden, oder was auch immer Ihre Währung ist). Es gibt keine Lizenzgebühren oder pro-Produkt Einschränkungen.

Sie bieten eine Reihe unterschiedlicher Größe und Stil Schriftarten und grundlegenden Zeichen Anrufe (Linie, Pixel, Box, etc.). Es hat keine definierte „Objekte“ wie Buttons oder Menü, aber ich war in der Lage, ohne zu viel Mühe ein Popup-Menü zu implementieren. Es bedeutet „Ansichtsfenster“ unterstützen, die verwendet werden können, um Textfelder, Menüs usw. zu definieren, jede mit ihren eigenen Attributen.

Es kommt auch mit einem Simulator, der auf einem PC läuft, so dass Sie Anzeige-Code auf Ihrem Desktop, bevor er zu einem eingebetteten System entwickeln.

Sie müssen wahrscheinlich Schriftarten Encoding (RLE) unter Verwendung von Run Length komprimieren. Siehe das PCX-Dateiformat für Beispiele, obwohl es wahrscheinlich am besten ist eine benutzerdefinierte RLE zu entwerfen. Sie haben nicht die Bit-Tiefe des LCD angeben, aber Schriftarten benötigen entweder ein Bit pro Pixel, wenn Anti-Aliasing nicht benötigt wird, oder maximal drei BPP mit Anti-Aliasing. Jeder Charakter hat seine eigene Breite haben, weil dicktengleiche Text nicht schön ist. Sie sollten direkt von den RLE komprimierten Schrift auf den Bildschirm übertragen, eine optimierte Routine.

SDL ist eine sehr tragbare Grafiken libary. Es ist in Embedded-Linux-Systemen verwendet werden, aber ich denke, es kann ohne Betriebssystem verwendet werden. Die nette Sache über SDL ist, dass Sie Windows / Linux verwenden, können Sie Ihre Benutzeroberfläche zu entwickeln und zu testen, und später Ihr Embedded-System abzielen. Keine Änderungen an Anwendungscode erforderlich!

Sie können auch die Anti-Grain Geometry-Bibliothek verwenden ( http: //www.antigrain. com / about / index.html ) oben auf SDL. Mit einer 16 oder 24-Bit-LCD erzeugt es beeindruckende Grafik. Es könnte für Ihre Umgebung nur ein bisschen zu groß sein, weil meine ausführbare Datei auf einem ARM / Linux-System über ein Megabyte war. Es enthielt SDL, AGG und libfreetype2 für Schriftwiedergabe. AGG ist auch ein wenig langsam, aber produziert schöne Ergebnisse.

(alte Frage, aber ich wollte meine Erkenntnisse über das Thema schreiben)

Für qualitativ hochwertige Grafiken, Anti-Grain Geometry ist eine gute Wahl. Es kompiliert auf etwa 50kB und kann individuell angepasst werden in alle Arten von Framebuffer zu schreiben und Rendering-Geräte: http://www.antigrain.com/

Für Benutzeroberfläche erscheint Gwen eine gute Wahl. Es ist leicht zu transportieren und kann angepasst werden, um zu machen, entweder Bitmap gehäutet Kontrollen oder Rechteck / Kreis / Linie bildet: https://github.com/garrynewman/GWEN

Wenn Sie dann auch ein RTOS auswählen, NuttX hat ein eigenes Grafik-Subsystem und Widget Toolkit ist: http://nuttx.sourceforge.net/

Meine Vermutung ist, dass so etwas wie FreeDOS als Werkzeugkette mit DJGPP kombiniert und Allegro als Grafikbibliothek möglicherweise in 512k Flash passen könnte und immer noch eine vernünftige Arbeit (Ich gehe davon aus haben Sie eine x86, die mehrere Mb haben RAM hier)

Aber diese Dinge sind sehr x86 spezifische (Allegro ist allerdings nicht).

Es ist schwierig, einen Linux-Kernel und eine nützliche Menge von User-Space-Software innerhalb 512k zu bekommen (aber möglich, etwas zu bekommen)

Sie sollten geben EasyGUI versuchen.

EasyGUI ist eine GUI-Grafik-Software / Bibliothek speziell für Arbeiten auf kleine (re) Embedded Systems entwickelt.

Kein Betriebssystem erforderlich. Eine grundlegende zyklische Exekutive ist genug. 512kb Flash sollte mehr als in Ordnung sein. Die Bibliothek EasyGUI bietet, ist sehr flexibel helfen, die Menge von Flash Sie müssen zu minimieren.

Unterstützt Schriftarten, Grafiken, Bitmaps, Touchscreens und eine Reihe von Video-Controller aus der Box.

Außerdem ist es wirklich billig (keine Lizenzgebühren, nur ein Pauschalbetrag pro Sitzplatz) und kommt mit einem PC-Programm Bildschirme zu entwerfen und Code generieren. Das PC-Programm dauert eine Weile, sich daran zu gewöhnen, aber am Ende ist es sehr schön, gewisse Dinge zu versuchen, auf dem PC und dann einfach zu generieren und beobachten Sie es auf Ihrem Ziel führen.

Sie haben eine Demo-Anwendung auf ihrer Website. Es ist lohnt es aus.

512kb klein ist. Viel Glück!

Sie können eine dsl versuchen wollen mit mplayer . Letzteres braucht keine GUI einen Film anzuzeigen. Ich denke, es könnte auch Bilder angezeigt werden.

Trotzdem fürchte ich es für Ihre Flash zu viel sein. Vielleicht wird die Quelle dieser Verbindungen helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top