2008-12-14 4 views
10

Es scheint, dass jede Art von Grafik-Bibliothek wie DirectFB oder MiniGui eine Art von zugrunde liegenden Betriebssystem wie Linux oder uClinux erfordert.Grafikbibliothek für eingebettete Systeme ohne Linux?

Ich bin herausgefordert mit dem Schreiben einer Software für einen Mikrocontroller mit nur 512kb Flash, einem LCD-Display und einem Touchscreen zum Anzeigen und Bearbeiten einiger Bilder und GUI-Teile.

Kennen Sie eine Bibliothek, die nur einen Zeiger auf den Videospeicher benötigt, der auch Zeilen, Bilder und Schriftarten verarbeiten kann?

+0

Sie haben nicht angegeben, ob es frei sein muss (wie in $$$) oder nicht. Wenn frei ist keine Voraussetzung, ich habe eine Liste so lange wie mein Arm, um Sie von früheren Projekten zu senden. Übrigens, ist es ein PIC32 oder ARM UC? – Dan

+0

Sie haben Recht, aber es scheint, dass es für diese Aufgabe keine freie Software (frei wie in Redefreiheit) gibt. Ein nettes Open-Source-Projekt für den Anfang.:) Lassen Sie uns wissen, ob Sie ein Projekt gefunden haben, neben dem es kostenlos ist oder nicht. Der uC ist ein ARM. – about

+0

Unterstützt Ihre Plattform C++? –

Antwort

3

Als eine dritte Partei Lösung integrieren Sie es einfach selbst geschrieben haben könnte.

Für die meisten wenn nicht alle Umgebungen ist der Bildschirm nur ein zweidimensionales Pixelfeld. Manchmal palettiert manchmal nicht, aber das ist egal, Sie können Ihre schreiben, wie Sie wollen.

Es Tonnen freien Code gibt für Linien und Bögen zeichnen, usw.

Der Killer kann Schriftarten sein, aber ich glaube, Sie werden feststellen, dass ein Dritter App alle Ihre Speicher kauen wird nur Schriftarten tun Sie sind ressourcenbegrenzt, daher sollten Sie die Schriftarten vorberechnen und nur die Bits kopieren.

Erstellen Sie ein zweidimensionales Array von Daten, machen Sie alle Ihre Arbeit auf Ihrem bevorzugten Host zunächst, es ist trivial zu speichern. BMP-Dateien, wenn Sie sehen möchten, was Sie zeichnen, und trivial eine Reihe von zu machen. bmp-Dateien in ein Video, wenn Sie etwas Action sehen wollen.

Wenn Sie generische C und keine libc Aufrufe verwenden (schreiben Sie Ihre eigenen memcpy, memset, etc), wird dieser Code überall ausgeführt, auf dem Host für die Entwicklung und auf dem Ziel.

Fonts werden dein Mörder sein, du musst sie vorberechnen, aber schaffst es, diese Informationen so klein wie möglich zu komprimieren und zur Laufzeit die Daten zu extrahieren und die Bits für jeden Buchstaben in den virtuellen Bildschirm zu kopieren so schnell du kannst.

Oder kaufen Sie einfach eine der vielen LCD-Lösungen, die das alles für Sie tun, und Sie senden einfach Befehle wie Zeichnen "Hallo Welt!" bei einigen (x, y) mit Blau als Vordergrund und Weiß als Hintergrund.

Grundsätzlich denke ich, dass die Nicht-OS-Lösungen immer noch zu viele Bibliotheken verwenden und für Ihre spezifische Anwendung zu groß sind. 2D-Arrays von Bytes oder Pixeln sind einfach zu verwalten. Selbst wenn Sie eine Anwendung für eine Desktop-Plattform schreiben, würde ich es auf diese Weise tun und in letzter Minute die vollständig neu gegliederte Bildschirmaktualisierung in eine bestimmte abhängige Bibliothek kopieren (ermöglicht maximale Portabilität von einem Betriebssystem zu einem anderen oder nicht).

-1

512kb ist klein. Viel Glück!

Sie könnten versuchen, eine dsl kombiniert mit mplayer. Letzteres benötigt keine GUI um einen Film anzuzeigen. Ich denke, es könnte auch Bilder anzeigen.

Trotzdem fürchte ich, es wird zu viel für Ihren Blitz sein. Vielleicht hilft die Quelle dieser Links.

+0

die passen nicht –

2

Wenn Ihre Anforderungen für Interaktivität und GUI-Widgets sehr bescheiden sind (oder Sie mit dem Entwerfen eigener Widgets zufrieden sind), werfen Sie einen Blick auf LibGD. Zeichnen Sie das Bild, das mit den Funktionen der Bibliothek auf dem Bildschirm angezeigt werden soll, und schreiben Sie es mit gdImagePngToSink() in den Bildspeicher.

2

Das Wichtigste, worüber Sie sich Sorgen machen sollten, ist die Steuerung des LCD und des Touchscreens. Es gibt eine Fülle von C-Bibliotheken (nicht frei) für diese Aufgabe. Eine schnelle Google hat mir diese Ergebnisse: Simplify Technologies und Ramtex.

Wenn Sie etwas Open Source finden möchten, dann starten Sie von Ihrem Controller-Typ und suchen Sie eingebettete Geräte Foren (auch wenn es nicht ARM ist, könnten Sie einfach C-Code portieren). Einige Vorschläge:

Auch stellt einige Kit ein SDK bieten (sowohl mit als auch ohne Linux) mit ihren Brettern. Beim Kauf eines Boards erhalten Sie normalerweise die Lizenz, den Code zu verwenden. Suchen Sie nach Entwicklungsplatinen mit demselben LCD-Controller.

0

Meine Vermutung ist, dass etwas wie FreeDOS, kombiniert mit DJGPP als Toolchain und Allegro als Grafik-Bibliothek möglicherweise in 512k Flash passen würde und immer noch einen vernünftigen Job (ich nehme an, Sie haben eine x86, die mehrere hat MB RAM hier)

Aber diese Dinge sind sehr x86 spezifisch (Allegro ist nicht obwohl).

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)

+0

Sehr schwierig. Und dann nehmen Sie an, es gibt viel mehr RAM als Flash. Dieser Mikrocontroller hat wahrscheinlich viel weniger RAM als Flash. –

6

wir verwendet haben „PEG“, die C++ Version von Swellsoftware seit vielen Jahren. Es ist kommerzielle Software, nicht kostenlos, aber der zugrunde liegende Bildschirmtreiber kann nur einen Zeiger auf Grafikspeicher verwenden und sie bieten viele Beispieltreiber für verschiedene Arten von Grafikhardware. Wir haben unseren eigenen Treiber für unsere proprietäre Hardware geschrieben und die Beispieltreiber als Referenz verwendet. Wir hatten schon immer eine Art von RTOS, aber ich glaube, dass PEG + auch ohne Betriebssystem funktionieren kann.

bestellen hier aus: http://www.swellsoftware.com/

viel Glück, Sie

2

Nicht frei, aber gut auf niedrigen Ressourcen-Systemen: 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 auch nicht unbedingt notwendig. Kein Betriebssystem ist erforderlich.

+0

Sieht sehr beeindruckend aus, danke! – about

+0

Aber TAT wurde von einem Grue gegessen, sorry von RIM, und es scheint, dass sie ihre Produkte Kastor und Cascades nicht mehr verkaufen. –

1

Wahrscheinlich müssen Sie die Schriftarten mit Run Length Encoding (RLE) komprimieren. Beispiele finden Sie im .pcx-Dateiformat, obwohl es wahrscheinlich am besten ist, einen benutzerdefinierten RLE zu entwerfen. Sie haben die Bittiefe des LCD nicht angegeben, aber die Schriftarten benötigen entweder ein Bit pro Pixel, wenn kein Antialiasing erforderlich ist, oder maximal drei BPP mit Antialiasing. Jedes Zeichen muss seine eigene Breite haben, weil der nichtproportionale Text nicht schön ist. Sie sollten direkt aus der RLE-komprimierten Schriftart mit einer optimierten Routine auf den Bildschirm rendern.

SDL ist eine sehr portable Grafikbibliothek. Es wird in Embedded-Linux-Systemen verwendet, aber ich denke, es kann ohne Betriebssystem verwendet werden. Das Schöne an SDL ist, dass Sie Windows/Linux verwenden können, um Ihre Benutzeroberfläche zu entwickeln und zu testen und später Ihr eingebettetes System zu targeten. Keine Änderungen am Anwendungscode erforderlich!

Sie können auch die Anti-Grain Geometry-Bibliothek (http://www.antigrain.com/about/index.html) über SDL verwenden. Mit einem 16- oder 24-Bit-LCD-Display werden beeindruckende Grafiken erzeugt.Es ist vielleicht ein bisschen zu groß für Ihre Umgebung, weil meine ausführbare Datei auf einem ARM/Linux-System etwa ein Megabyte groß war. Es enthielt SDL, AGG und libfreetype2 zum Font-Rendering. AGG ist auch etwas langsam, bringt aber schöne Ergebnisse.

+0

Dies sind nützliche Informationen! Es ist ein 16-Bit-Farb-LCD mit 640x480 Pixel Größe und ich möchte mit Anti-Aliasing für Schriftarten und andere grafische Sachen. Ich habe auch über Kairo nachgedacht, aber es könnte auch zu groß sein. – about

0

Sie sollten easyGUI versuchen.

easyGUI ist eine GUI-Grafiksoftware/Bibliothek, die speziell für die Arbeit mit kleinen (eingebetteten) Systemen entwickelt wurde.

Kein Betriebssystem erforderlich. Eine grundlegende zyklische Exekutive ist genug. 512 KB Flash sollten mehr als OK sein. Die Bibliothek, die easyGUI bietet, ist sehr flexibel und hilft Ihnen dabei, die benötigte Menge an Flash zu minimieren.

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

Plus es ist wirklich billig (keine Lizenzgebühren, nur eine Menge pro Sitz) und kommt mit einem PC-Programm, um Bildschirme zu entwerfen und Code zu generieren. Das PC-Programm braucht eine Weile, um sich daran zu gewöhnen, aber am Ende ist es sehr nett, bestimmte Dinge auf dem PC auszuprobieren und dann zu generieren und zu beobachten, wie es auf dem Ziel läuft.

Sie haben eine Demo-App auf ihrer Website. Es lohnt sich, es zu überprüfen.

+0

Wir verwenden es - es funktioniert gut, aber Sie brauchen eine Windows-Maschine, um die PC-Seite der Dinge zu führen. –

2

Für den kleinstmöglichen Platzbedarf sollten Sie RamTEX wirklich in Betracht ziehen. Ich habe es für zwei Projekte mit 8-Bit-PICS verwendet. Der ROM-Bereich war in meinen Anwendungen ca. 35K mit ~ 1K für RAM (die Menge hängt davon ab, ob Sie RAM-Pufferung für das Display benötigen). Der ROM-Speicherplatz hängt von den grafischen Funktionen ab, die Sie benötigen oder benötigen.

Sie bieten vollständige Quelle und der einmalige Preis ist ziemlich gut, weniger als 1000 $ (beachten Sie, dass die auf ihrer Website aufgeführten Preise in Dollar oder was auch immer Ihre Währung ist) konvertiert werden müssen. Es gibt keine Lizenzgebühren oder Einschränkungen pro Produkt.

Sie bieten eine Reihe von Schriftarten in verschiedenen Größen und Stilen sowie grundlegende Zeichenaufrufe (Zeile, Pixel, Box usw.). Es hat keine definierten "Objekte" wie Knöpfe oder Menüs, aber ich konnte ein Popup-Menü ohne große Probleme implementieren. Es unterstützt "Viewports", mit denen Textfelder, Menüs usw. mit jeweils eigenen Attributen definiert werden können.

Es kommt auch mit einem Simulator, der auf einem PC läuft, so dass Sie Display-Code auf Ihrem Desktop entwickeln können, bevor Sie zu einem eingebetteten System wechseln.

1

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

Für hochwertige Grafiken, Anti-Grain Geometry ist eine gute Wahl. Es kompiliert zu ungefähr 50kB und kann besonders angefertigt werden, um in alle Arten Framebuffers und Wiedergabegeräte zu schreiben: http://www.antigrain.com/

Für Benutzerschnittstelle scheint 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 Formen: https://github.com/garrynewman/GWEN

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