Pregunta

Parece que cualquier tipo de biblioteca gráfica como DirectFB o MiniGUI requiere algún tipo de sistema operativo subyacente, como Linux o uClinux.

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.

¿Conoce usted alguna biblioteca que sólo tiene un puntero a la memoria de vídeo que también puede manejar líneas, imágenes y fuentes?

¿Fue útil?

Solución

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 si no todos los entornos de la pantalla es una matriz de dos dimensiones de píxeles. A veces paletizado veces no, pero que duerma importa, puede escribir el suyo lo que le apetezca.

Hay un montón 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 hacer fuentes, que son recursos limitados lo que se quiere comprobar la validez de calcular los tipos de letra y copiar los bits.

Hacer una matriz bidimensional de los datos, hacer todo su trabajo en el host favorito en un primer momento, es trivial para guardar archivos .bmp, si usted quiere ver lo que está dibujando, y trivial a su vez una serie de .bmp archivos en un video si quieren ver algo de acción.

Si utiliza C genérica, 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.

Fuentes van a ser tu asesino que tiene que pre-calcularlos pero se las arreglan para exprimir esa información abajo en tan pequeño como sea posible, y en tiempo de ejecución extraen los datos y copiar los bits para cada letra en la pantalla virtual más rápido como sea posible.

O simplemente comprar una de las muchas soluciones lcd que hacen todo esto para usted y usted simplemente envíe comandos como empate "Hello World!" en algún (x, y) usando azul como el primer plano y blanco como el fondo.

Básicamente creo que las soluciones no os todavía van a utilizar demasiados bibliotecas y ser demasiado grande para su aplicación específica. 2d matrices de bytes o píxeles son triviales dirigirse a sí mismo. Incluso si usted está escribiendo una aplicación para una plataforma de escritorio que lo haría de esta manera y en el último minuto copiar la actualización de la pantalla totalmente renedered a alguna biblioteca dependiente OS (permite la máxima portabilidad de un sistema operativo o no a otro).

Otros consejos

Hemos utilizado "PEG", la versión C ++, desde Swellsoftware durante muchos años. Es un software comercial, no es libre, pero el conductor pantalla subyacente puede utilizar sólo un puntero a la memoria de gráficos y proporcionan muchos conductores de muestra para diferentes tipos de hardware de gráficos. Escribimos nuestro propio conductor (s) personalizado para nuestro hardware propietario, utilizando los controladores de muestra como referencia. Siempre hemos tenido algún tipo de RTOS, pero creo PEG + también puede funcionar sin un sistema operativo.

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

buena suerte,

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 . Dibujar la imagen que desea que aparezca en la pantalla utilizando las funciones de la biblioteca y, a continuación, escribirlo en el registro de cuadro utilizando gdImagePngToSink ().

Lo más importante que debe estar preocupado es el controlador de la pantalla LCD y la pantalla táctil. Hay una gran cantidad de bibliotecas de C (no libre) para esa tarea. Una rápida de Google me dio los siguientes resultados: Simplificar Tecnologías 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 un tablero general le da la licencia para utilizar el código. Buscar tarjetas de desarrollo con el mismo controlador LCD.

No es libre, pero bien en sistemas de bajos recursos: http://www.tat.se y su productos Kastor y La Cascada. Sólo se requiere un puntero a la memoria de vídeo, malloc y algo que se parece a un sistema de archivos. Los dos últimos requisitos no son absolutamente necesarios tampoco. No se requiere ningún sistema operativo.

Para el menor espacio posible que realmente debería considerar Ramtex. Lo he utilizado en dos proyectos con PICS de 8 bits. El espacio ROM estaba a punto de 35K en mis aplicaciones con ~ 1K de RAM (la cantidad depende de si usted necesita el búfer de memoria RAM para la pantalla). espacio ROM depende de las características gráficas que desea o necesita.

Proporcionan fuente completo y el precio de una sola vez es bastante bueno, menos de $ 1000 (tenga en cuenta que los precios que figuran en su sitio web tienen que ser convertidos a dólares, o lo que su moneda es). No hay restricciones por derechos de autor o subproducto.

Ellos proporcionan un número de diferentes tipos de letra de tamaño y estilo y llamadas básicas de dibujo (línea, los píxeles, caja, etc.). No tiene ningún "objetos" definidos, tales como botones o menús, pero yo era capaz de implementar un menú emergente sin demasiados problemas. Que es compatible con "ventanas" que se pueden utilizar para definir los cuadros de texto, menús, etc, cada uno con sus propios atributos.

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

Es probable que tenga para comprimir las fuentes usando Run Length Encoding (RLE). Ver el formato de archivo .pcx para ejemplos, aunque probablemente la mejor manera de diseñar un RLE personalizado. No se especificó la profundidad de bits de la pantalla LCD, pero necesita fuentes o bien un bit por píxel si no se necesita el antialiasing, o un máximo de tres BPP con el antialiasing. Cada personaje tiene que tener su propio ancho de paso fijo ya que el texto no es agradable. Usted debe hacer directamente desde el RLE comprimido de la fuente a la pantalla, usando una rutina optimizada.

SDL es un libary gráficos muy portátil. Se utiliza en sistemas embebidos Linux, pero creo que se puede utilizar sin un sistema operativo. Lo bueno de SDL es que se puede utilizar Windows / Linux para desarrollar y probar la interfaz de usuario, y luego orientar su sistema embebido. Ningún cambio en el código de aplicación necesarias!

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

(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 hasta alrededor de 50 KB 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 formas rectángulo / círculo / línea sólo: https://github.com/garrynewman/GWEN

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

Mi conjetura es que algo como FreeDOS, combinado con DJGPP como herramientas principales, y Allegro como una biblioteca de gráficos concebiblemente podría encajar en 512k de flash y todavía lo hacen un trabajo razonable (estoy suponiendo que tiene un sistema x86 que tiene varios Mb de RAM aquí)

Pero estas cosas son muy específicos x86 (Allegro no es sin embargo).

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)

Usted debe dar easyGUI intentarlo.

easyGUI es una gráfica GUI software / biblioteca diseñada específicamente para trabajar en pequeñas (er) Embedded Systems.

Ningún sistema operativo es necesario. Un ejecutivo cíclico básico es suficiente. 512kb de flash debe ser más que aceptable. La biblioteca ofrece easyGUI es muy flexible para ayudar a minimizar la cantidad de flash necesitas.

Soporta fuentes, gráficos, mapas de bits, pantallas táctiles y un montón de controladores de vídeo fuera de la caja.

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 necesita un tiempo para acostumbrarse a, pero al final es muy bueno para probar ciertas cosas en el PC y luego simplemente generar y ver que se ejecute en su objetivo.

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

512kb es pequeño. Buena suerte!

Es posible que desee probar un combina con mplayer . Este último no necesita una interfaz gráfica de usuario para visualizar una película. Supongo que también podría mostrar imágenes.

Sin embargo me temo que va a ser demasiado para su flash. Tal vez la fuente de estos enlaces será de ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top