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

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

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

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

14.12.2008 07:47:53
Вы не указали, должен ли он быть бесплатным (как в $$$) или нет. Если бесплатность не обязательна, у меня есть список до тех пор, пока я могу отправить вас из предыдущих проектов. Кстати, это PIC32 или ARM uC?
Dan 14.12.2008 14:58:41
Вы правы, но, похоже, для этой задачи нет свободного программного обеспечения (свободного как в свободе слова). Хороший проект с открытым исходным кодом для начала. :) Дайте нам знать, если вы нашли какой-либо проект, помимо того, что он бесплатный или нет. ОК - это рука.
about 16.12.2008 17:55:55
Ваша платформа поддерживает C ++?
Dave Van den Eynde 5.03.2009 14:27:19
Да, он также поддерживает C ++. Я работаю с коллекцией компиляторов gnu на машине с Linux.
about 8.03.2009 14:39:09
11 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

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

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

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

3
16.01.2009 22:19:16
Только кажется, что написание графической библиотеки самостоятельно очень быстро. Чтобы создать библиотеку, которая может рисовать больше, чем прямоугольники и круги, вам нужно реализовать несколько сложных алгоритмов. Например, рисование не горизонтальной и не вертикальной линии требует реализации алгоритма линии Брезенхэма или даже его оптимизированной версии, которая работает только с целыми числами, если вы хотите запустить его на микроконтроллере. Обрезка строк - это не сложная вещь: есть несколько алгоритмов, которые ее реализуют. Рисование многоугольника свободной формы намного сложнее: оно даже не реализовано в J2ME из-за его сложности.
Sauron 26.08.2018 17:47:54

512кб это мало. Удачи!

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

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

-1
14.12.2008 08:14:13

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

2
14.12.2008 08:39:06

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

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

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

2
19.12.2008 13:59:17

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

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

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

0
5.01.2009 22:01:39
Очень сложно. И тогда вы предполагаете, что оперативной памяти намного больше, чем флэш-памяти. Этот микроконтроллер, вероятно, имеет гораздо меньше оперативной памяти, чем флэш-память.
Prof. Falken contract breached 19.10.2011 06:30:11

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

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

удачи,

6
7.01.2009 15:37:39

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

2
8.02.2009 14:25:17
Выглядит очень эффектно, спасибо!
about 13.02.2009 09:27:05
Но TAT съел Grue, извините, RIM, и кажется, что они больше не продают свои продукты Kastor и Cascades.
Prof. Falken contract breached 19.10.2011 06:28:08

Вам, вероятно, нужно сжать шрифты, используя кодировку длины выполнения (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 также немного медленный, но дает прекрасные результаты.

1
9.02.2009 09:40:24
Это полезная информация! Это 16-битный цветной ЖК-дисплей с размером 640x480 пикселей, и я хочу использовать сглаживание для шрифтов и других графических объектов. Я также думал о Каире, но он мог бы быть и слишком большим.
about 13.02.2009 09:34:27

Вы должны попробовать easyGUI .

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

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

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

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

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

0
24.04.2009 13:04:42
Мы используем его - он работает хорошо, но вам нужна машина с Windows, чтобы работать на стороне ПК.
peter_mcc 19.07.2010 07:33:22

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

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

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

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

2
25.03.2010 23:13:48

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

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

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

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

1
10.07.2014 15:08:20