2008-12-14 17 views
10

Parece que cualquier tipo de biblioteca gráfica como DirectFB o MiniGui requiere algún tipo de sistema operativo subyacente como Linux o uClinux.Biblioteca de gráficos para sistemas integrados sin Linux?

Soy desafiado con la escritura de un software para un microcontrolador con un solo flash de 512kb, una pantalla LCD y una pantalla táctil para mostrar y manipular algunas imágenes y partes de la GUI.

¿Conoces alguna biblioteca que solo necesite un puntero a la memoria de video que también puede manejar líneas, imágenes y fuentes?

+0

No especificó si debe ser libre (como en $$$) o no. Si no es un requisito, tengo una lista siempre y cuando sea mi brazo para enviarte de proyectos anteriores. Por cierto, ¿es un PIC32 o ARM uC? – Dan

+0

Tiene razón, pero parece que no hay un software libre (gratuito como la libertad de expresión) para esta tarea. Un buen proyecto de código abierto para comenzar.:) Háganos saber si encontró algún proyecto, además de gratuito o no. El uC es un ARM. – about

+0

¿Su plataforma admite C++? –

Respuesta

3

En el momento de incorporar un poco de solución de terceros que podría haber acaba de escribir por sí mismo.

En la mayoría de los entornos, si no en todos, la pantalla es simplemente una matriz bidimensional de píxeles. A veces paletizado a veces no, pero eso no importa, puede escribir el suyo como quiera.

Hay toneladas de código libre por ahí para dibujar líneas y arcos, etc.

El asesino puede ser fuentes pero creo que usted encontrará que una tercera aplicación partido va a masticar toda la memoria sólo haciendo fuentes , tiene recursos limitados, por lo que querrá precomputar las fuentes y simplemente copiar los bits.

Haga una matriz bidimensional de datos, haga todo su trabajo en su host favorito al principio, es trivial guardar archivos .bmp si quiere ver lo que está dibujando, y trivial para convertir una serie de. BMP archivos en un video si desea ver alguna acción.

Si utiliza genérica C, y no hay llamadas libc (escribe su propio establecimiento de memoria, memset, etc), este código se ejecutará en cualquier lugar, en el host para el desarrollo y en el objetivo.

Las fuentes van a ser tu asesino, tienes que precomputarlas pero logras meter esa información lo más pequeña posible, y en el tiempo de ejecución extraer los datos y copiar los bits de cada letra en la pantalla virtual como tan rápido como puedas

O simplemente compre una de las muchas soluciones de lcd que hacen todo esto por usted y simplemente envíe comandos como "¡Hola, mundo!" en algunos (x, y) usando azul como primer plano y blanco como fondo.

Básicamente, creo que las soluciones que no son OS todavía usarán demasiadas bibliotecas y serán demasiado grandes para su aplicación específica. Los arreglos en 2d de bytes o píxeles son triviales para administrarse. Incluso si está escribiendo una aplicación para una plataforma de escritorio, lo haría de esta manera y en el último minuto copie la actualización de la pantalla completamente reordenada a alguna biblioteca dependiente del sistema operativo (permite la máxima portabilidad de un sistema operativo o no a otro).

-1

512kb es pequeño. ¡Buena suerte!

Es posible que desee probar un dsl combinado con mplayer. Este último no necesita una GUI para mostrar una película. Supongo que también podría mostrar imágenes.

No obstante, me temo que será demasiado para su flash. Tal vez la fuente de estos enlaces ayude.

+0

esos no cabrán –

2

Si los requisitos para la interactividad y la GUI widgets son muy modesto (o estás bien con el diseño de sus propios widgets), echar un vistazo a LibGD. Dibuja la imagen que deseas que aparezca en la pantalla usando las funciones de la biblioteca, y luego escríbela en el búfer de cuadros usando gdImagePngToSink().

2

Lo importante que debe preocupar es el controlador de la pantalla LCD y la pantalla táctil. Hay una gran cantidad de bibliotecas C (no gratuitas) para esa tarea. Un Google rápido me consiguió estos resultados: Simplify Technologies y Ramtex.

Si quieres encontrar algo de código abierto, a continuación, iniciar desde el tipo de controlador y buscar foros de dispositivos integrados (aunque no es el brazo, usted podría fácilmente código C puerto). Algunas sugerencias:

Además, algunos kit fabrica ofrecer un SDK (con y sin Linux) con sus tablas. La compra de una placa generalmente le da la licencia para usar el código. Busque tablas de desarrollo con el mismo controlador LCD.

0

Supongo que algo así como FreeDOS, combinado con DJGPP como una cadena de herramientas, y Allegro como una biblioteca de gráficos podría encajar en 512k de flash y seguir haciendo un trabajo razonable (supongo que tienes un x86 que tiene varios Mb de ram aquí)

Pero estas cosas son muy específicas de x86 (Allegro no es así).

Es difícil conseguir un núcleo de Linux y una cantidad útil de software de espacio de usuario dentro de 512k (pero posible obtener algo a)

+0

Muy complicado. Y luego asumes que hay mucha más memoria RAM que flash. Este microcontrolador probablemente tiene mucha menos memoria RAM que flash. –

6

Hemos utilizado "PEG", la versión C++, desde Swellsoftware durante muchos años. Es un software comercial, no gratuito, pero el controlador de pantalla subyacente puede usar solo un puntero a la memoria de gráficos y proporcionan muchos controladores de muestra para diferentes tipos de hardware de gráficos. Escribimos nuestros propios controladores personalizados para nuestro hardware propietario, utilizando los controladores de muestra como referencia. Siempre hemos tenido algún tipo de RTOS, pero creo que PEG + también puede funcionar sin un sistema operativo.

Échale un vistazo aquí: http://www.swellsoftware.com/

buena suerte,

2

No es gratis, pero es bueno en sistemas de recursos bajos: http://www.tat.se y sus productos Kastor y Cascades. Solo requiere un puntero a la memoria de video, malloc y algo que se parece a un sistema de archivos. Los dos últimos requisitos tampoco son absolutamente necesarios. No se requiere un sistema operativo.

+0

Se ve muy impresionante, gracias! – about

+0

Pero TAT fue comido por un grue, lo siento por RIM, y parece que ya no venden sus productos Kastor y Cascades. –

1

Probablemente necesite comprimir fuentes utilizando Run Length Encoding (RLE). Consulte el formato de archivo .pcx para ver ejemplos, aunque probablemente sea mejor diseñar un RLE personalizado. No especificó la profundidad de bits de la pantalla LCD, pero las fuentes necesitan un bit por píxel si no se necesita antialiasing, o un máximo de tres BPP con antialiasing. Cada personaje debe tener su propio ancho porque el texto monoespaciado no es agradable. Debe renderizar directamente desde la fuente comprimida RLE a la pantalla, usando una rutina optimizada.

SDL es una librería gráfica muy portátil. Se usa en sistemas Linux embebidos, pero creo que se puede usar sin un sistema operativo. Lo bueno de SDL es que puedes usar Windows/Linux para desarrollar y probar tu UI, y luego enfocarte en tu sistema embebido. ¡No se necesitan cambios al código de la aplicación!

También podría utilizar la biblioteca de Geometría Anti-Grain (http://www.antigrain.com/about/index.html) en la parte superior de SDL. Con una pantalla LCD de 16 o 24 bits, produce gráficos deslumbrantes.Puede ser demasiado grande para su entorno, porque mi ejecutable en un sistema ARM/Linux era de aproximadamente un megabyte. Contenía SDL, AGG y libfreetype2 para la representación de fuentes. AGG también es un poco lento, pero produce resultados hermosos.

+0

¡Estas son informaciones útiles! Es una pantalla LCD a color de 16 bits con un tamaño de 640x480 píxeles y quiero usar anti-aliasing para fuentes y otras cosas gráficas. También estaba considerando el Cairo, pero también podría ser demasiado grande. – about

0

Deberías probar easyGUI.

easyGUI es una biblioteca/software de gráficos GUI específicamente diseñado para trabajar en pequeños sistemas embebidos.

No se necesita sistema operativo. Un ejecutivo cíclico básico es suficiente. 512kb de Flash deberían estar más que bien. La biblioteca que proporciona easyGUI es muy flexible y ayuda a minimizar la cantidad de Flash que necesita.

Admite fuentes, gráficos, mapas de bits, pantallas táctiles y un montón de controladores de video listos para usar.

Además de que es muy barato (no hay derechos de licencia, sólo una cantidad fija por asiento) y viene con un programa de ordenador para el diseño de las pantallas y generar código. El programa de PC tarda un tiempo en acostumbrarse, pero al final es muy agradable probar ciertas cosas en la PC y luego simplemente generar y ver que se ejecute en su objetivo.

Tienen una aplicación de demostración en su sitio web. Vale la pena echarle un vistazo.

+0

Lo estamos usando, funciona bien pero necesita una máquina con Windows para ejecutar el lado de la PC. –

2

Para obtener la huella más pequeña posible, debería considerar RamTEX. Lo he usado en dos proyectos con PICS de 8 bits. El espacio ROM era de aproximadamente 35K en mis aplicaciones con ~ 1K para RAM (la cantidad depende de si necesita memoria RAM para la pantalla). El espacio ROM depende de las características gráficas que desee o necesite.

Proporcionan fuente completa y el precio por única vez es bastante bueno, menos de $ 1000 (tenga en cuenta que los precios que figuran en su sitio web deben convertirse a dólares, o cualquiera que sea su moneda). No hay regalías o restricciones por producto.

Proporcionan una cantidad de fuentes de estilo y tamaño diferentes y llamadas de dibujo básicas (línea, píxeles, recuadro, etc.). No tiene ningún "objeto" definido, como botones o menús, pero pude implementar un menú emergente sin demasiados problemas. Admite "viewports" que se pueden usar para definir cuadros de texto, menús, etc., cada uno con sus propios atributos.

También viene con un simulador que se ejecuta en una PC para que pueda desarrollar el código de visualización en su escritorio antes de pasar a un sistema integrado.

1

(vieja pregunta, pero quería publicar mis conclusiones sobre el tema)

Para gráficos de alta calidad, Anti-Grain Geometry es una buena opción. Se compila a unos 50kB y se puede personalizar para escribir en todo tipo de framebuffers y dispositivos de representación: http://www.antigrain.com/

Para la interfaz de usuario, Gwen parece una buena opción. Es fácil de transportar y se puede personalizar para representar texto en mapa de bits despellejado controles o sólo formas rectángulo/círculo/línea: https://github.com/garrynewman/GWEN

Entonces si también está seleccionando un RTOS, NuttX tiene su propio subsistema de gráficos y Widget Toolkit: http://nuttx.sourceforge.net/

Cuestiones relacionadas