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

StackOverflow https://stackoverflow.com/questions/366278

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Другие советы

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

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

удачи вам,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы должны дать Легкий язык попробовать.

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

Операционная система не требуется.Достаточно простого циклического исполнителя.512 КБ флэш-памяти должно быть больше, чем в норме.Библиотека, предоставляемая easyGUI, очень гибкая, помогая свести к минимуму объем необходимой вам флэш-памяти.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top