Как стать автором
Обновить

Интеграция в проект LVGL графической библиотеки для микроконтроллеров

Время на прочтение 4 мин
Количество просмотров 30K
Всего голосов 39: ↑39 и ↓0 +39
Комментарии 56

Комментарии 56

Гуд. На AVR32/64 не портируется?

эта библиотека на все портируется, без шуток.

"Предположим под ваш дисплей драйвер уже написан порт LVGL и вам надо только интегрировать его в проект." — что-то не так с этим предложением

Спасибо. переделал
НЛО прилетело и опубликовало эту надпись здесь
Библиотека приятная, но достаточно ресурсоемкая. И по флеш памяти, и по оперативной. Ей нужен во-первых видеобуфер, а во вторых куча под хранение объектов. Пробую внедрить ее на f103 с экраном 480*320 по FSMC. По факту нужно видеобуфер хотябы на 20 строк (480*20), а лучше больше. На моем не сильно замороченном интерфейсе размер данных в куче доходит до 11кб. Для МК у которого всего 64кб это проблема.
В другом проекте использую H750, у него с оперативной памятью проблем нет, но флеша всего 128кб :)

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

Очень понравился механизм файловых систем. Мне нужно было показывать картинку из SPI флеш и картинки создаваемые «на лету» из файлов на SD карте. При помощи файловых систем удалось решить достаточно просто и прозрачно.
Вы просто не умеете портировать драйвер для дисплея.

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

Если вам зачем-то понадобиться отрисовать весь экран заново, для этого достаточно вызвать lv_obj_invalidate(lv_scr_act()) или что-то вроде этого

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

Ну так это плюс и это логично! Зачем тратить время на перерисовывание того, что не изменилось?
Достаточно просто их не использовать, gcc сам умеет выкидывать не используемый код :)
там еще формируются структуры под тему и вообще очень замороченые взаимозависимости. поэтому не просто так там дефайны есть для отключения ненужных фич.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
ведь это gui библа. зачем рисовать линии? рисовать линии можно например с помощью tft_espi библиотеки.
НЛО прилетело и опубликовало эту надпись здесь
да для arduino. я для примера привел. графических библиотек для esp8266 и esp32 достаточно. чисто графических. они и легче и проще по api. я просто не понимаю зачем брать полноценную gui библиотеку продвинутую и рисовать с ее помощью линии. забивание гвоздей микроскопом прямо.
НЛО прилетело и опубликовало эту надпись здесь
Можно код в студию с глючащими линиями — а то у меня сыновья (лет 10 назад) частенько находили баги в Turbo Vision, да и в компиляторах, а на поверку оказывалось, что дело в определенном непонимании.
НЛО прилетело и опубликовало эту надпись здесь
touchGFX закрытая либа.
НЛО прилетело и опубликовало эту надпись здесь
Если это за деньги, нафиг оно надо? Сылку приведете где можно исходники скачать?
НЛО прилетело и опубликовало эту надпись здесь
Код самой библиотеки, внутренности фреймворка. Вы понимаете знаете слова «исходники»?
НЛО прилетело и опубликовало эту надпись здесь
этот код закрыт

речь шла именно об этом коде
НЛО прилетело и опубликовало эту надпись здесь
Представте себе — нельзя, если речь идет об устройствах класа C.
НЛО прилетело и опубликовало эту надпись здесь
Вы сами написали, исходники фрейморка — закрыты… Откуда они у меня появятся? Скиньте сылку на исходники, или сгенерируйте в CubeMX небольшой проект, в котором я смогу изменить код самой TouchGFX (не гренерированные файлы, они не относятся к фреймворку). Не надо утверждать что-то без доказательств.
НЛО прилетело и опубликовало эту надпись здесь
Так сылочка на исходники будет или нет?
НЛО прилетело и опубликовало эту надпись здесь
dernuss сегодня в 10:52
ну исходники GUI она открывает)


не я это утверждал, я знаю другой факт — исодников бесплатно этот фреймворк не предоставляет.
НЛО прилетело и опубликовало эту надпись здесь
Возможно речь о том что сгенерированные исходники под копирайтом фреймворка? Если был куплен TouchGFX дизайнер то можно использовать сгенерированные файлы в коммерческом проекте. Если дизайнер не куплен то нельзя
НЛО прилетело и опубликовало эту надпись здесь

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

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

Но насчёт отставания вы правы, по крайней мере в культуре разработки софта разница очень заметна. Из моего опыта редкий программист встраиваемых систем пользуется системами контроля версий, например. А за всякие SOLID, паттерны и интерфейсы вообще можно хипстером-выпендрёжником прослыть. Хотя конечно может это мне просто не везёт так.
А за всякие SOLID, паттерны и интерфейсы вообще можно хипстером-выпендрёжником прослыть

А они часто и не нужны, если устройство однозадачное и код необновляемый и сопровождаемый одним человеком. Если что-то хитрое (сборочный робот или микроволновка с кучей рецептов), то вот тут-то приёмы, ориентированные на читаемость и расширяемость, и вылезают.
Вот, видите?
Что именно? Насколько я помню, МК, которые могут сразу несколько вещей в условиях реального времени, появились относительно недавно, до этого в сложном оборудовании ставили несколько МК, связанных между собой, т.е. микросервисы и паттерн Наблюдатель были хардварные :)

Это шутка была, к тому что Ваш комментарий удачно подтвердил мой тезис.


Конкретно на Ваш комментарий можно ответить так — не обязательно применять что-то просто потому что ты это знаешь, но важно знать чтобы иметь возможность понять когда надо применить и чтобы иметь возможность это сделать. Тут точно так-же как с инструментами для ручной работы — если у вас есть молоток, то не обязательно делать им вообще всё подряд — но вот когда нужно забить гвоздь то плохо когда молотка у вас нету. Но я серьёзно не вижу смысла продолжать спорить.


Почти никогда не выходит продуктивного разговора на эту тему, понимаете? Стоит хоть мельком упомянуть хоть что-то из теории программирования, наработанной за последние пару десятилетий — как в половине случаев собеседник-эмбеддер тут-же бросается доказывать что то, о чём ты упомянул, либо в принципе ерунда никчёмная, либо в его конкретном случае не нужно, либо конкретно ему не нужно, либо ещё десяток причин почему его это не должно касаться.


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


Или проекты, где все *.с файлы кроме одного исключены из компиляции, и заинклужены (не заголовочники, а *.с файлы) в этот самый единственный, что фактически даёт один юнит компиляции длиной в 7+ тысяч строк. Ключевого слова static там принципиально нет, всё что не локальное у функции — то глобальное. Всё может обращаться ко всему. А переменная с говорящим названием TFM отвечает — очевидно же — за логику работы пищалки.


Конечно это всё полные случайности — на самом деле все всё делали хорошо, оно само плохо получилось. Никакое понимание какой-либо теории здесь бы не помогло, да.


А если серьёзно — на мой взгляд в таких спорах сильнее всего влияет недоверие к чужому опыту (в лучшем случае) и/или банальная лень (в худшем случае). Иногда ещё примешивается свойственное всем людям желание ощущать себя особенным, избранным, дивергентом, довакином, Бэтменом. Мол "Это хипстерам в их вебе паттерны нужны, они просто не знают что такое настоящее программирование — без права на ошибку и по локоть в хлорном железе. Нам, гордым и могучим эмбеддерам, вся эта детская возня ни к чему.". А приводимые в споре аргументы — просто рационализация.


В общем что я хочу сказать. Скромнее надо быть, и не чураться перенимать чужой опыт.

Да я с вами по сути не спорю, просто мне вспомнилось, как знакомый джавист обозвал мой код (да, метеостанция :) ) приветом из 70х, а когда я предложил ему написать правильно, родил что-то за 20 метров. Многие не понимают, что писать в эмбедде как под десктоп просто нельзя: классы с накладными расходами, динамическая линковка, исключения, динамическое выделение памяти — всё это дорого и часто просто не позволяет закрыть ТЗ на выбранном МК. Ну не понимают многие хипстеры веб-программисты, что 100 тактов — это долго, а 1Мб оперативки — офигеть как много. Так что вместо паттернов эмбеддер лучше потратит время на изучение схемотехники.

Другой вопрос про организацию работы: svn/гит это просто удобно, тесты полезны (несмотря на то, что в эмбедде часто разводит плату, пишет код и гоняет тесты один человек), а doxygen экономит время. Тут просто надо любить, уметь, практиковать.
НЛО прилетело и опубликовало эту надпись здесь
Дык то на флеше, а в буфер обычно откусываем кусочками единицами-десятками кил)
НЛО прилетело и опубликовало эту надпись здесь
Дело-то в том, что именно подцепляется отдельной схемой. Писать контроллер дисплея, чтобы он хранил два фрейма целиком, когда этого не требуется, это как продавать программу, где вместе с диском лежат две плашки оперативки на 16 гиг :)

Можете подсказать по области видимости виджетов?

Допустим, в одной функции я создаю метку с одним текстом. А в другой функции меняю её текст. У меня всё крашится при этом. Видимо, область видимости метки ограничена первой функцией, и вторая функция творит дичь в ОЗУ. Но как сделать правильно?

Посмотрите логи компиляции на предмет предупреждения. Возможно ваша строка const

Какая ошибка при падении?

Менять строку по указателю

Если ограничено областью видимости, как тогда это собралось компилятором?

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории