Hallo, ich hätte mal gerne eine Einschätzung von euch erfahrenen
Embedded Linux Entwicklern.
Mein System soll bestehen aus:
AT91SAM9G45 Prozessor mit 400MHz
128MB DDR2 RAM an EBI1
256MB NAND an EBI2
640x480 TFT am internen LCD-Controller
(ohne Touchscreen, stattdessen:)
ein paar Drehgeber und Tasten an den GPIO
Und natürlich die üblichen Schnittstellen, Ethernet, USB, seriell etc.
Die Applikation ist eine Industriesteuerung, bei der Prozessdaten
visualisiert werden sollen. Die Daten werden dargestellt auf
nachgebildeten Analoginstrumenten und Balkendiagrammen.
Es existiert eine Anwendung von meinem Vorgänger, die auf GTK+ im Linux
Framebuffer basiert. Gerendert wird das Bild mittels cairo. Auf einem PC
läuft das flüssig und erreicht ausreichende Framerates. Die Anwendung
ist von einem guten Programmierer recht effizient umgesetzt, jedenfalls
ist es eine Freude, den Quelltext zu lesen und zu verstehen. Im
Gegensatz zu dem, was man meistens so zu lesen bekommt.
Meine Frage wäre jetzt, bekommt ich eine solche Applikation (GTK, Cairo)
auf dem Linux Embedded System in akzeptabler Geschwindigkeit zum Laufen
oder brauche ich da mehr Rechenpower?
Richard schrieb:> Und natürlich die üblichen Schnittstellen, Ethernet, USB, seriell etc.>> Die Applikation ist eine Industriesteuerung, bei der Prozessdaten> visualisiert werden sollen. Die Daten werden dargestellt auf> nachgebildeten Analoginstrumenten und Balkendiagrammen.>> Es existiert eine Anwendung von meinem Vorgänger, die auf GTK+ im Linux> Framebuffer basiert. Gerendert wird das Bild mittels cairo. Auf einem PC> läuft das flüssig und erreicht ausreichende Framerates. Die Anwendung> ist von einem guten Programmierer recht effizient umgesetzt, jedenfalls> ist es eine Freude, den Quelltext zu lesen und zu verstehen. Im> Gegensatz zu dem, was man meistens so zu lesen bekommt.>> Meine Frage wäre jetzt, bekommt ich eine solche Applikation (GTK, Cairo)> auf dem Linux Embedded System in akzeptabler Geschwindigkeit zum Laufen> oder brauche ich da mehr Rechenpower?
Mal eine voellig unsinnige Verallgemeinerung, das geht alles locker,
abhaengig von Deiner Definition von "ausreichend", "akzeptabel" und ob
aller Code auch immer im DDR RAM ist.
"Auf einem PC läuft das flüssig und erreicht ausreichende Framerates."
Ich hab hier ein paar PCs und Laptops rumstehen, zwischen dem
langsamsten und dem schnellsten sind >> Faktor 10 an
Verarbeitungsgeschwindigkeit drin. Also mit was fuer einem PC
vergleichst Du...
Die Definitionen sollten schon etwas eindeutiger sein damit jemand eine
bessere Antwort als die meinige posten kann.
Aus dem Bauchfaktor heraus wuerde ich sagen dass alles laeuft aber die
Frame Rate koennte nicht ausreichend oder unakzeptabel sein.
Robert
p.s. ist wirklich nicht boese gemeint.
Ok, ich sehe es ein, das war nicht besonders konkret.
Lassen wir den PC-Vergleich und die existierende Software mal beiseite.
Würdest du ein solches System - also ARM 9 mit DDR2 und 400 MHz -
eingebauter LCD-Controller ohne HW-Beschleunigung für fähig halten,
analoge Anzeigen mit einer Framerate von > 20 fps zu rendern?
Oder nochmal anders, hat jemand Erfahrung mit gtk2.0 auf Framebuffer im
Embedded-Bereich? Was kann man da für Leistungen erwarten?
Ich würde empfehlen, das AT91SAM9G45-EKES zu kaufen und es
auszuprobieren. Linux ist schon bei, sodaß du wahrscheinlich recht
leicht eine einfache GTK-Anwendung zum laufen bringen kannst.
Aus meiner Erfahrung: Ich habe mal mit dem AT91SAM9G20 eine Anwendung
programmiert, allerdings mit externem Grafikbeschleuniger und Qt. Wenn
man mit Qt zeichnet, ins SDRAM, dann bekommt man keinen vollständigen
Bildschirmupdate bei 640x480 mit 60 Hz hin. Liegt je nach Komplexität
eher bei 5 Hz oder so für einen vollen Bildschirmupdate mit ein paar
dutzend Grafikelementen. Bei Balkenanzeigen kannst du aber einiges
tricksen, z.B. erstmal alles drumherum einmal zeichnen und dann nur
inkrementell aktualisieren, mit mehreren Framebuffern und
Offscreen-Images. Das geht dann locker mit 60 Hz. Müsste mit Cairo auch
zu schaffen sein, allerdings richte dich schonmal darauf ein, ein wenig
Low-Level Code zu schreiben, der kein Cairo verwendet und direkt Teile
von Offscreen-Images in den Framebuffer kopiert. Kann aber auch sein,
daß DDR RAM einiges an Geschwindigkeit bringt und du nur Cairo brauchst.
Für ein flüssiges Update brauchst du aber noch Double-Buffering. War bei
meinem Projekt nicht ganz so einfach, das mit Qt unter einen Hut zu
bringen, aber vielleicht geht das mit GTK einfacher.