Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 06.11.2022, 16:48  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию Re: Применение С++

Для МК стандартного C за глаза.
Реклама:
vavan1983 вне форума  
Непрочитано 06.11.2022, 16:53  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Применение С++

Я раньше тоже так думал. Пока не намучался на Си с навороченной графикой в GUI. Приходилось для каждого графического элемента создавать структуру и хранить массивы указателей на них.
Хотя простые вещи типа вон того чайника, когда он один, написать процедурным методом проще и понятнее, чем объектно-ориентированным.
Создавать объект "чайник", когда он один, действительно ну так себе... Тут и процедурный метод справится.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
mike-y-k (06.11.2022)
Непрочитано 06.11.2022, 18:57  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Применение С++

Мелочь с 1kB памяти и, например TMS320, относятся к МК, но писать для TMS320 на чистом C можно только если нужен простой алгоритм с перемигивания светодиодами при первом попробовать…
Дальше или переписывать все библиотеки на C, или писать свои (при наличии уже работающих, но на C++)…
А если встает еще и вопрос применения на множестве МК, тогда преимущества C++ становятся еще очевидней…
Тема сильно перекосилась в сторону классической модели Windows vs unix…
Можно на том, что знаешь и на чем умеешь, а если таки уже не хватает - смотреть в сторону других возможностей…
C++ дает такое качество, а практически все IDE спокойно работают с ним…
Ну а дальше каждый решает для себя сам - получить рабочее и с минимумом ошибок завтра или еще неделю писать и отлаживать новую библиотеку под изменившиеся условия…
Часто это бывает просто дополнительная переменная с необходимостью работы с ней во множестве мест. В ООП это решается сильно проще и с меньшим числом ошибок…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 06.11.2022, 20:34  
serg_42
Прописка
 
Аватар для serg_42
 
Регистрация: 15.06.2008
Адрес: Новокузнецк
Сообщений: 173
Сказал спасибо: 870
Сказали Спасибо 313 раз(а) в 82 сообщении(ях)
serg_42 на пути к лучшему
По умолчанию Re: Применение С++

Сообщение от Variant99 Посмотреть сообщение
Непонятно только как это теперь к микроконтроллерам применить
Все библиотеки Ардуин написаны на C++. Весь код библиотек открыт, при желании можно разобраться и это даже полезно. Покупаешь у китайцев Arduino Nano на atmega328 с каким нибудь простеньким дисплеем и вперёд...
Только есть одна проблема - чем чаще юзаешь Ардуиновские библиотеки (не выходя за пределы интерфейсной части), тем быстрее тупеешь.
serg_42 вне форума  
Непрочитано 27.01.2023, 22:07  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Применение С++

Сообщение от vavan1983 Посмотреть сообщение
Для МК стандартного C за глаза.
Когда-то была тема длинное - короткое нажатие кнопки. Долго ее мусолили.
Сейчас я себе 2 класса на двух файлах для кнопок, упрощенный и с полным фаршем. и все получается просто. Создал объекты для кнопкок и в них уже все меркеры для всех фронтов и длинное и короткое нажатие для каждого объекта. и не путаешься с кучей разных переменных, которые внутри класса. Единственное, что надо на цикл один раз вызывать проверку кнопки, а потом в программе только проверяй нужные меркеры.

Продолжение "меркер vs маркер" тут
Сообщение от МВА Посмотреть сообщение
Вложения:
Тип файла: txt BUT_avr.txt (2.3 Кб, 0 просмотров)
Тип файла: txt BUT_long_short_avr.txt (3.5 Кб, 0 просмотров)

Последний раз редактировалось mike-y-k; 29.01.2023 в 03:16. Причина: Разделение темы
МВА вне форума  
Непрочитано 28.01.2023, 12:41  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Применение С++

Если честно, вот эти вот классы кнопок ничем не отличаются от того же, написанного в Си. Потому как если писать на С++, то эта штука будет писаться через шаблоны и виртуальные порты.
А настройка портов в микроконтроллерах всё-же желательна не поотдельности для каждой кнопки, каждого вывода, а для всего порта разом. Или хотябы для части порта, а не по одному пину. Это менее удобно для программиста, зато когда есть сотня ног и эту сотню по каждому пину отдельно дергать - это ну не очень то. Именно так и получаются медленно работающие программы, когда погромисту было просто лень.

Последний раз редактировалось mike-y-k; 29.01.2023 в 03:16. Причина: Разделение темы
NewWriter вне форума  
Непрочитано 28.01.2023, 14:45  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию

Сообщение от NewWriter Посмотреть сообщение
намучался на Си с навороченной графикой в GUI
А чего там мучиться? Берешь nuklear, да пишешь.
Но лично я и длинной палкой GUI касаться не собираюсь! Если твоей железяке категорически нужен GUI (картинку, например, показывать), проще всего веб-морду нарисовать, чем возиться с тем же nuklear (а потом вдруг окажется, что на другом дистрибутиве это не взлетит).
Но правильней всего писать такой софт, где никогда не понадобится GUI.
Что до ЯП, лично мне за глаза С хватает. Правда, иной раз приходится там эдакую ООПщину реализовать. Коллега ржет, что я изобретаю новый С++. Но мне органически противен С++, и уж тем паче — современный, со всеми этими наворотами, шаблонами и т.п. И rust я однозначно пользовать не буду, т.к. зачем вообще на что-то с идеального С соскакивать? Кроме того, на С я могу писать как под МК, так и под ПК (все мои сетевые демоны и т.д., и т.п. - на сях).

МВА, а у меня вот такой простейший КА для определения состояния кнопок:
Нажмите, чтобы открыть спойлер

Код:
void process_keys(){
    static uint32_t lastT = 0;
    if(Tms == lastT) return;
    uint16_t d = (uint16_t)(Tms - lastT);
    lastT = Tms;
    for(int i = 0; i ‹ BTNSNO; ++i){
        keybase *k = &allkeys[i];
        keyevent e = k-›event;
        if(BTN_state(i)){ // key is in pressed state
            switch(e){
                case EVT_NONE: // just pressed
                case EVT_RELEASE:
                    if((k-›counter += d) › PRESSTHRESHOLD){
                        k-›event = EVT_PRESS;
                    }
                break;
                case EVT_PRESS: // hold
                    if((k-›counter += d)› HOLDTHRESHOLD){
                        k-›event = EVT_HOLD;
                    }
                break;
                default:
                break;
            }
        }else{ // released
            if(e == EVT_PRESS || e == EVT_HOLD){ // released
                if(k-›counter › PRESSTHRESHOLD) k-›counter = PRESSTHRESHOLD;
                else if((k-›counter -= d) ‹ 0){
                    k-›event = EVT_RELEASE; // button released
                }
            }
        }
        if(e != k-›event){
            k-›lastTms = Tms;
            lastUnsleep = Tms;
        }
    }
}
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось mike-y-k; 28.01.2023 в 16:30. Причина: 6.6
eddy вне форума  
Непрочитано 28.01.2023, 15:13  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Применение С++

Сообщение от eddy Посмотреть сообщение
лично я и длинной палкой GUI касаться не собираюсь!
Ну это лично ваше дело. Далеко не все с этим согласны и не всем интересен такой динозавризм.
Сообщение от eddy Посмотреть сообщение
Но правильней всего писать такой софт, где никогда не понадобится GUI.
Угу. Ну сделайте часы-будильник без индикации Чисто для поржать - время будильника устанавливать будете по числу "пиков" или через веб-интерфейс?
Глупости сочинять то не следует.

Си - хороший язык низкого уровня с большой свободой действий. С++ - первая ступень языков высокого уровня, позволяющий более организованно описывать "высокие материи". Конечно, у него немало недостатков, поскольку он вышел из языка Си. И в процессе развития версий старые проблемы не устранялись, а заменялись надстройками. Например, все знают проблему дублирования понятий typename и class в шаблонах (только в STL появляется различие, да и то искусственное), смысловое дублирование class и struct, отсутствие компактного типа string.

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

Сообщение от eddy Посмотреть сообщение
void process_keys()
Агааа, то есть компилятор в режиме С++ всё-таки ) ну-ну, ну-ну.

Последний раз редактировалось NewWriter; 28.01.2023 в 15:15.
NewWriter вне форума  
Непрочитано 28.01.2023, 15:24  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Применение С++

Сообщение от NewWriter Посмотреть сообщение
сделайте часы-будильник без индикации
На компьютере у меня такие уже есть: команда date (да и вообще, у меня PS1 так настроен, что там сразу дата и время выводится - удобно).
А если имеются в виду аппаратные часы, то тоже не всегда индикация нужна (скажем, если мы коннектимся по какой-нибудь шине). А если нужны, то таки для МК сделать графику - проще простого. Берем тот же семисегментник, вуаля! Ну или светодиодные матрицы. Да даже TFT - фигня же!
Сообщение от NewWriter Посмотреть сообщение
динозавризм
динозавризм - это мышку надрачивать по любому поводу. В консоли производительность работы как минимум на порядок выше. Я уж молчу об автоматизации всего и вся.
Сообщение от NewWriter Посмотреть сообщение
компилятор в режиме С++ всё-таки
Компилятор - обычный gcc, что такое "режим С++"? Я пользуюсь С99, всякие новомодные навороты обычно не использую. И код здесь - классический сишный в стиле С99.
Сообщение от NewWriter Посмотреть сообщение
А вот чтобы описать пины через шаблоны, действительно приходится прибегать к черезжопному решению.
Да ладно! Тот же VladislavS показывал хорошее решение. Пока ты все эти пины активируешь, компилятор просто накапливает "настройки" этих шаблонов. А когда компилятор на реализацию натыкается, то просто все это вываливает в одном месте. И получается, что куча разбросанных по разным местам настроек реализуются тупо изменением за один присест значений регистров настроек ног.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 28.01.2023, 15:40  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Применение С++

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

Сообщение от eddy Посмотреть сообщение
все эти пины активируешь, компилятор просто накапливает "настройки" этих шаблонов.
Понятия не имею, кто такой VladislavS, но если бы ты видел, что и сколько нужно написать в классе пинов, чтобы заработало так, как описываешь, то понял бы что такое "черезжопный метод".

Но основное назначение С++ - это всё-таки не пины. Пины хорошо и на Си описываются. А вот что для Си неудобоваримо, так это тот же самый GUI с его экранными кнопками.
NewWriter вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Старейший инструмент человека - новое применение 4712357482 Отвлекитесь, эмбеддеры! 51 25.12.2017 13:12
Применение конденсаторов Low ESR в низкочастотных схемах Demo65 Источники питания и свет 12 25.03.2017 21:23
Применение PSoC3 CY8CKIT-030. Лабораторный блок питания ViorDash ПЛИС и другие МК 7 14.11.2014 01:24
Нашел применение батарейкам от сигарет Kabron Делимся опытом 4 02.06.2013 21:14
Применение схемы регулятора jipers Электроника - это просто 4 09.11.2010 21:28


Часовой пояс GMT +4, время: 15:59.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot