Перейти к содержанию

меню для дисплея 1602


Рекомендуемые сообщения

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

Ссылка на комментарий
Поделиться на другие сайты

вы хотите это всё запустить на микроконтроллере AVR (в ардуино стоит atmega)? или использовать что-то серьёзнее

пробовал C++ для ATtiny2313 и ATmega32. После экспериментов пришлось отказаться от классов с конструктором и деструктором (только статические классы) и больше использовать шаблоны.
new у вас используется без delete, это понятно, т.к. в контроллере не будет "сборщика мусора". Может тогда всё таки статика предпочтительнее?

моё по C++ можно посмотреть здесь (uc_Cpp):
https://ru.files.fm/u/a2sfccuf#/list/

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@technik-1017 думаю попробовать запустить на arduino nano(мега 328 вроде стоит). Если честно я даже не уверен, хватит ли памяти для этого меню в контроллере. Начал писать "для тренировки" так сказать, а там уж что получится. Если выйдет что-то стоящее - хорошо, не выйдет - лишний опыт тоже хорошо ;)

З.Ы. а delete наверное потом прикручу, чтоб можно было выгрузить меню, если оно не используется, а потом создать заново.

Mishany "время зря потратите...." - что вы имеете ввиду?

Изменено пользователем Вениамин Раков
Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Есть достаточно широкоизвестное micromenu - но лично мне не понравилось.

Все прочие "универсальные" системы меню еще хуже.

Сам я делал минимум трижды попытку создать свою "универсальную" систему, и достигал определенных успехов, но все равно из проекта в проект у меня кочует только общий принцип, а саму систему пишу всякий раз заново. В мире "маломерных" МК, которыми являются AVR-ки, места для особого универсализма нет, и любое слишком универсальное решение приносит больше проблем, чем удобства - это моё личное мнение.

Все известные мне системы универсальных меню не позволяют работать без остановки главного цикла, т.е. пока из меню не выйдешь, главный цикл не крутится. Это, имхо, большая проблема, из-за которой приходится многие проекты излишне усложнять, добавляя "мультизадачность" там, где её и не надо. Оно того стоит?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ссылка на комментарий
Поделиться на другие сайты

32 минуты назад, Вениамин Раков сказал:

...время зря потратите...." - что вы имеете ввиду?

Монстр, занимающий всю память программ (ведь Вы сами не уверены в том, что хватит 32кБ), вряд ли подойдет к МК. МК не ПК - еще одну планку не вставить. Тем более, что меню должно занимать места не более 20-30% памяти программ, чтобы основной задаче было, где разместиться.

2 минуты назад, ARV сказал:

Все известные мне системы универсальных меню не позволяют работать без остановки главного цикла, т.е. пока из меню не выйдешь, главный цикл не крутится. Это, имхо, большая проблема, из-за которой приходится многие проекты излишне усложнять, добавляя "мультизадачность" там, где её и не надо.

Разочарование. Используя Ассм, всегда пишу меню, как часть динамического главного цикла. Поэтому МК полноценно отрабатывает программу, даже находясь в меню.

Ссылка на комментарий
Поделиться на другие сайты

Только что, Геннадий сказал:

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

Собственно, я по этой же причине пишу свои варианты на Си - ассемблер тут не главное. Например, мой последний проект DIGILIGHT - это практически полностью один главный цикл, прерывания использую только для 10-миллисекундной синхронизации, ИК-приема и работы АЦП, остальное, даже дребезг кнопок - в главном цикле. И система многоуровневого меню в том числе - пока меню работает, все мигает, сверкает и т.д.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

@Геннадий к сожалению АССмом не владею :) хоть и мощная штука.

2 минуты назад, Геннадий сказал:

Монстр, занимающий всю память программ

:) да, может и монстр - посмотрим. Если и правда получится монстр - то я не расстроюсь а напишу конкретное меню под конкретную задачу.

 

Ссылка на комментарий
Поделиться на другие сайты

Вот потому, что меню нужно интегрировать в общую задачу, как часть цикла, а не создавать библиотечного монстра и сделали замечание "время зря потратите....".:)

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Вениамин Раков сказал:

а delete наверное потом прикручу

этого делать нельзя, т.к. в микроконтроллерах не используют "сборщик мусора". Таким образом если вы создадите объект с помощью new, то выделите определённый объём памяти, далее вы освобождаете память с помощью delete. Память освободится, а точнее не будет использоваться и при следующем выделении памяти с помощью new освобождённая ранее память не будет использоваться, а будет выделена память которая ранее не использовалась. Т.е. после нескольких манипуляций с new и delete у вас просто закончится память (RAM).

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

Я для себя создал своё меню, которое меня устраивает, до реализации его на C++ руки пока не дошли.

Считаю, что делать своё меню на C++ стоит, главное учесть все особенности использования C++ для микроконтроллеров. Может в будущем именно ваше меню будет использоваться как основа при разработке устройств на C++.

Ссылка на комментарий
Поделиться на другие сайты

33 минуты назад, technik-1017 сказал:

...Может в будущем именно ваше меню будет использоваться как основа при разработке...

Поделок на Си++.

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

Ссылка на комментарий
Поделиться на другие сайты

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

@technik-1017 спасибо за конструктивный ответ.

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

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Вениамин Раков сказал:

..."от нечего делать" :)

Потратьте время с пользой, на изучение Ассма. Пригодится для личного опыта. Лишним не будет.

Ссылка на комментарий
Поделиться на другие сайты

54 минуты назад, Геннадий сказал:

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

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

37 минут назад, Вениамин Раков сказал:

что это никому не нужно, т.к. будет жрать много памяти

не будет, если делать с учётом что это микроконтроллер, а не ПК.
Микроконтроллеры быстро развиваются (становятся мощнее) и использование C++ станет обычным делом (потом и Linux может прижиться в микроконтроллерах).

Вы быстро сдаётесь, не поддавайтесь на провокации, продолжайте делать.

Ссылка на комментарий
Поделиться на другие сайты

@technik-1017 а я и не сдался :) сначала дождусь ардуинку из китая, портирую туда свою либу, посмотрю что к чему, может что-то переделаю а там уже буду решать -надо оно мне или нет.

а так да, она съест кучу памяти, хочу посмотреть насколько много

 

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Вениамин Раков сказал:

а так да, она съест кучу памяти, хочу посмотреть насколько много

Когда я сравнивал код на Си и C++, то по объёму RAM перерасхода не было (байт в байт), а по Flash был совсем небольшой перерасход (зависело от оптимизации)

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Вениамин Раков сказал:

в винде скомпилированный exe-шник весит 25,0 КБ (25 600 байт)

лучше сделайте так:
нарисуйте схему в протеусе (или возьмите у меня по вышеуказанной ссылке) и в Atmel Studio или IAR (мне больше нравиться компилятор IAR, отладка в AVR Studio 4.18) создавайте код и проверяйте (можно без железа создать рабочий вариант).

Ссылка на комментарий
Поделиться на другие сайты

В 23.03.2018 в 10:15, technik-1017 сказал:

Память освободится, а точнее не будет использоваться и при следующем выделении памяти с помощью new освобождённая ранее память не будет использоваться, а будет выделена память которая ранее не использовалась. Т.е. после нескольких манипуляций с new и delete у вас просто закончится память (RAM).

Достаточно громкое заявление. Можно ссылочку на докУмент, обосновывающий его ?

Ссылка на комментарий
Поделиться на другие сайты

Это утверждение связано с дефрагментацией памяти, которую некому устранять в микроконтроллерах.
Я использую IAR, у них есть это: https://www.iar.com/kr/support/resources/articles/mastering-stack-and-heap-for-system-reliability/

Можно почитать ещё это https://geektimes.ru/post/271394/

Для себя сделал вывод, что использование new и delete в проектах на микроконтроллерах небезопасно (выдумывать средства контроля освобождаемой памяти желания нет).

Есть смысл использовать new только при инициализации переменных при запуске программы (освобождение памяти - выключение устройства)

 

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, technik-1017 сказал:

Это утверждение связано с дефрагментацией памяти, которую некому устранять в микроконтроллерах.

С этого и нужно было начинать.
А то сразу :

В 23.03.2018 в 10:15, technik-1017 сказал:

этого делать нельзя

и т.д... и т.п... :)

PS: Делать можно. Но осторожно...

Ссылка на комментарий
Поделиться на другие сайты

47 минут назад, Alex сказал:

PS: Делать можно. Но осторожно...

В C++ есть ещё шаблоны vector, list, map, также есть exception, но их использование в микроконтроллерах не приведёт ни к чему хорошему и использовать не рекомендуется (что равносильно "запрещено").
Использовать не  "осторожно", а "очень осторожно", а лучше не надо (это трудно выявляемые ошибки).

55 минут назад, Alex сказал:

С этого и нужно было начинать.

я привёл только вывод, а не ход рассуждений (их достаточно в интернете)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...