Графическая библиотека для встроенных систем без Linux?

Кажется, что любая графическая библиотека вроде DirectFB или MiniGui требуется какая-то базовая операционная система, такая как Linux или uClinux.

Мне поставили задачу написать программное обеспечение для микроконтроллера с флэш-памятью на 512 кбайт, ЖК-дисплеем и сенсорным экраном для отображения и обработки некоторых изображений и частей графического интерфейса.

Знаете ли вы какую-либо библиотеку, которая просто нуждается в указателе на видеопамять, которая также может обрабатывать строки, изображения и шрифты?

Ответ 1

К тому моменту, когда вы включите стороннее решение, вы могли бы просто написать его самостоятельно.

Для большинства, если не во всех средах, экран представляет собой всего лишь двумерный массив пикселей. Иногда под паллеты иногда нет, но это не имеет значения, вы можете написать свой, как хотите.

Существует много свободного кода для рисования линий и дуг и т.д.

Убийца может быть шрифтом, но я думаю, вы обнаружите, что стороннее приложение будет пережевывать всю вашу память, просто делая шрифты, вы ограничены ресурсами, поэтому вам захочется предварительно вычислить шрифты и просто скопировать бит.

Сделайте двумерный массив данных, сначала сделайте всю свою работу на своем любимом хосте, тривиально сохранить файлы .bmp, если вы хотите увидеть, что вы рисуете, и тривиальным, чтобы включить серию .bmp файлы в видео, если вы хотите посмотреть некоторые действия.

Если вы используете общие C, а не вызовы libc (напишите свои собственные memcpy, memset и т.д.), этот код будет работать в любом месте, на хосте для разработки и на целевой.

Шрифты будут вашим убийцей, вы должны предварительно вычислить их, но сможете сжать эту информацию до такой маленькой, как можете, и во время выполнения извлеките данные и скопируйте бит для каждой буквы на виртуальный экран так быстро как вы можете.

Или просто купите один из многих решений для lcd, которые делают все это для вас, и вы просто отправляете ему команды, например, "Hello World!". на некоторых (x, y), используя синий цвет как передний план, а белый - как фон.

В принципе, я думаю, что решения non-os по-прежнему будут использовать слишком много библиотек и быть слишком большими для вашего конкретного приложения. 2d массивов байтов или пикселей тривиальны для управления вами. Даже если вы пишете приложение для настольной платформы, я бы сделал это таким образом и в последний момент скопировал полностью обновленное обновление экрана в некоторую зависимую от ОС библиотеку (позволяет максимально переносить одну ОС или нет в другую).

Ответ 2

Мы использовали "PEG", версию С++, от Swellsoftware в течение многих лет. Это коммерческое программное обеспечение, а не бесплатное, но основной драйвер экрана может использовать только указатель на графическую память, и они предоставляют множество примеров драйверов для различных типов графического оборудования. Мы написали собственный собственный драйвер для нашего проприетарного оборудования, используя образцы драйверов в качестве ссылки. У нас всегда была какая-то RTOS, но я считаю, что PEG + также может работать без ОС.

Посмотрите здесь: http://www.swellsoftware.com/

удачи,

Ответ 3

Если ваши требования к интерактивности и виджетам GUI очень скромны (или вы в порядке с созданием собственных виджетов), посмотрите LibGD. Нарисуйте изображение, которое вы хотите отобразить на экране, используя функции библиотеки, а затем запишите его в буфер кадра с помощью gdImagePngToSink().

Ответ 4

Важная вещь, о которой вы должны беспокоиться, - это контроллер ЖК-дисплея и сенсорного экрана. Для этой задачи существует множество библиотек C (не бесплатно). Быстрый google дал мне следующие результаты: Упростить технологии и Ramtex.

Если вы хотите найти что-то с открытым исходным кодом, то начните с вашего типа контроллера и поиска в форумах с встроенными устройствами (даже если это не ARM, вы можете легко передать код C). Некоторые предложения:

Кроме того, некоторые производители комплектующих предлагают SDK (как с Linux, так и без него) с их платами. Приобретение платы обычно дает вам лицензию на использование кода. Найдите платы разработки с одним и тем же контроллером ЖК-дисплея.

Ответ 5

Не бесплатно, но хорошо в системах с низким ресурсом: http://www.tat.se и их продукты Kastor и Cascades. Это требует только указателя на видеопамять, malloc и что-то похожее на файловую систему. Оба последних требования не являются абсолютно необходимыми. Операционная система не требуется.

Ответ 6

Для минимально возможного следа вы должны действительно подумать о RamTEX. Я использовал его в двух проектах с 8-битной PICS. Пространство ПЗУ было около 35K в моих приложениях с ~ 1K для ОЗУ (количество зависит от того, нужна ли вам буферизация ОЗУ для отображения). ROM зависит от графических функций, которые вам нужны или нужны.

Они обеспечивают полный источник, и одноразовая цена неплохая, менее 1000 долларов США (обратите внимание, что цены, указанные на их веб-сайте, должны быть конвертированы в доллары или независимо от вашей валюты). Никаких лицензионных платежей или ограничений на продукт не существует.

Они предоставляют несколько разных шрифтов размера и стиля и основные вызовы рисования (строка, пиксели, поле и т.д.). У него нет определенных "объектов", таких как кнопки или меню, но я смог реализовать всплывающее меню без особых проблем. Он поддерживает "видовые экраны", которые могут использоваться для определения текстовых полей, меню и т.д., Каждый со своими атрибутами.

Он также поставляется с симулятором, который работает на ПК, чтобы вы могли разработать код отображения на своем рабочем столе, прежде чем переходить во встроенную систему.

Ответ 7

Вероятно, вам нужно сжать шрифты, используя кодировку длины пробега (RLE). См. Формат файла .pcx для примеров, хотя, вероятно, лучше всего создать пользовательский RLE. Вы не указали глубину бит на ЖК-дисплее, но шрифты должны иметь один бит на пиксель, если не требуется сглаживание или максимум три BPP с сглаживанием. Каждый персонаж должен иметь свою собственную ширину, потому что моноширинный текст не очень приятный. Вы должны отобразить непосредственно из сжатого шрифта RLE на экран, используя оптимизированную процедуру.

SDL - очень портативная графическая библиотека. Он используется во встроенных Linux-системах, но я думаю, что он может использоваться без ОС. Самое приятное в SDL заключается в том, что вы можете использовать Windows/Linux для разработки и тестирования вашего пользовательского интерфейса, а затем для целевой встроенной системы. Никаких изменений кода приложения не требуется!

Вы также можете использовать библиотеку Anti-Grain Geometry (http://www.antigrain.com/about/index.html) поверх SDL. С 16 или 24-битным ЖК-дисплеем он создает потрясающую графику. Это может быть слишком большим для вашей среды, потому что мой исполняемый файл в системе ARM/Linux составлял около одного мегабайта. Он содержал SDL, AGG и libfreetype2 для рендеринга шрифтов. AGG также немного медленнее, но дает прекрасные результаты.

Ответ 8

(старый вопрос, но я хотел опубликовать свои выводы по этому вопросу)

Для высококачественной графики, Anti-Grain Geometry - хороший выбор. Он составляет около 50 кБ и может быть настроен для записи во все виды фреймбуфферов и устройств рендеринга: http://www.antigrain.com/

Для пользовательского интерфейса Gwen представляется хорошим выбором. Он легко переносится и может быть настроен для рендеринга элементов управления с растровой оболочкой или только прямоугольных/круглых линий: https://github.com/garrynewman/GWEN

Затем, если вы также выбираете RTOS, NuttX имеет собственную графическую подсистему и инструментарий виджета: http://nuttx.sourceforge.net/

Ответ 9

Я предполагаю, что что-то вроде FreeDOS, в сочетании с DJGPP в качестве инструментальной цепочки, и Allegro в качестве графической библиотеки, возможно, вписываются в 512k флеш-памяти и все еще выполняют разумную работу (я предполагаю, что у вас есть x86, который имеет несколько Mb здесь)

Но эти вещи очень специфичны для x86 (Allegro - это не так).

Трудно получить ядро ​​Linux и полезное количество программного обеспечения для пользовательского пространства внутри 512k (но возможно получить SOMETHING)

Ответ 10

Вы должны дать easyGUI.

easyGUI - графическое программное обеспечение/библиотека графического интерфейса, специально разработанная для работы с небольшими встроенными системами.

Нет операционной системы. Базового циклического руководителя достаточно. 512kb Flash должно быть более чем нормально. Библиотека easyGUI обеспечивает очень гибкую работу, чтобы минимизировать количество требуемой Flash.

Поддерживает шрифты, графику, растровые изображения, сенсорные экраны и кучу видеоконтроллеров из коробки.

Плюс это действительно дешево (без лицензионных сборов, всего лишь фиксированная сумма за место) и поставляется с ПК-программой для проектирования экранов и генерации кода. Программа ПК требует времени, чтобы привыкнуть, но в конце очень приятно попробовать некоторые вещи на ПК, а затем просто сгенерировать и посмотреть, как она запускается на вашей цели.

У них есть демо-приложение на своем веб-сайте. Это стоит проверить.

Ответ 11

512kb мал. Удачи!

Возможно, вы захотите попробовать dsl в сочетании с mplayer. Последнему не нужен графический интерфейс для отображения фильма. Я думаю, он также может отображать изображения.

Тем не менее, я боюсь, что это будет слишком много для вашей вспышки. Возможно, источник этих ссылок поможет.