Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

pokk писал(а):Лучше тем что нету не каких delay
чем же это лучше?
никак не пойму: все так страшатся этого делея, что просто удивляюсь... может, я чего-то не понимаю? ну так объясните.
или это догма навроде "goto открывает ворота в АД"?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

[uquote="ARV",url="/forum/viewtopic.php?p=3351173#p3351173"]чем же это лучше?[/uquote]
Тем что процессор не сидит и не крутит while, а выполняет другие операции, которых куча, по мимо одного термодатчика.
ARV, судя по вашей логике, вы бы и на время конвертации температуры, сидели ждали бы пока термодатчик выдаст результат? :))
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

pokk писал(а):ARV, судя по вашей логике, вы бы и на время конвертации температуры, сидели ждали бы пока термодатчик выдаст результат?
именно так и делал, когда делал управление инкубаторами. и что? ни один заказчик не был недоволен.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Ну круто, я тоже так иногда делаю когда мигаю светодиодом :)) :)) :))
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Так вот и я о том же: почему мигать можно, а другие задачи решать нельзя при помощи задержек? Вы думаете, CPU быстрее износится, если будет "напрасно" молотить в пустом цикле? ;)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Пустой цикл в "делэе", намного пустее чем в "вайле" ;).
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

[uquote="ARV",url="/forum/viewtopic.php?p=3351402#p3351402"]Так вот и я о том же: почему мигать можно, а другие задачи решать нельзя при помощи задержек? Вы думаете, CPU быстрее износится, если будет "напрасно" молотить в пустом цикле? ;)[/uquote]
Тем что процессор не сидит и не крутит while, а выполняет другие операции, которых куча, по мимо одного термодатчика.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

А если нет кучи дел?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3351577#p3351577"]А если нет кучи дел?[/uquote]а правильнее вопрос сформулировать так: а если программу разрабатывать так, чтобы вся куча делалась, а delay этому не мешала? :)))

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

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

[uquote="ARV",url="/forum/viewtopic.php?p=3351706#p3351706"]а если программу разрабатывать так, чтобы вся куча делалась, а delay этому не мешала?[/uquote]
Хорошая куча - маленькая куча, особенно в перспективе её поддержки в длинючей перспективе и во всех деталях [которые забываются]. А delay - тот самый хромой бегун в эстафете, будь вся остальная команда хоть трижды быстроходные эфиопы - равняться будут по нему, и иногда это обидно. Но если никто и никуда не бежит - почему бы и нет?
[uquote="ARV",url="/forum/viewtopic.php?p=3351706#p3351706"]людям ради того, чтобы решить проблему СЛОЖНО, хотя и круто, не лень изобретать самодельные велосипеды в виде подобий ОС...[/uquote]
Всякая концепция компактна - но черти [которые в деталях] ждут автора по мере погружения в болото реальности. Вряд-ли желание сложнокрутости можно считать определяющим изначально - скорее наоборот - ибо человек по природе ленив и сделав что-то один раз хочет просто копи-вставлять это решение, не особо приходя в сознание далее. Просто по мере реализации жизнь обставляет концепцию лесом костылей. А мы видим конечный результат и думаем про человека не очень позитивно. Стремление к инкапсуляции не самый страшный из грехов. ;-)
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

ARV писал(а):Так вот и я о том же: почему мигать можно, а другие задачи решать нельзя при помощи задержек?
Потому что если несколько задач выполняются друг за другом и паузы для них должны быть разные, то это лишнее усложнение кода, которое не улучшает чтение программы и ее дальнейшую доработку.
Статья по теме https://habrahabr.ru/post/249273/
Спойлер
Очень часто (да что там часто, практически всегда) микроконтроллеры применяют в условиях, когда необходимо отслеживать сразу несколько параметров. Или наоборот, управлять одновременно несколькими устройствами.

Вот задача для примера: у нас есть 4 выхода, на которых необходимо выводить импульсы разной длительности с разными паузами. Все, что у нас есть – это системный таймер, который считает в миллисекундах.

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

Код: Выделить всё

// инициализация
int time1on=500; // Время, пока выход 1 должен быть включен
int time1off=250; // Время, пока выход 1 должен быть выключен
unsigned int now=millis();
....
// где-то в цикле
if(millis()<now+time1on)
{
  port1=ON;
}
else
{
port1=OFF;
if(millis()>now+time1on+time1off)
  {
  now=millis();
  }
}
И так или примерно так для всех 4 портов. Получается приличная портянка на несколько экранов, но эта портянка работает и работает довольно быстро, что для микроконтроллера важно.

Потом внезапно программист замечает, что при каждом цикле дергается порт, даже если его состояние не меняется. Правит всю портянку. Потом число портов с такими же потребностями увеличивается в два раза. Программист плюет и переписывает все в одну функцию типа PortBlink(int port num).

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

Счастье? А вот фигу. Заказчик что-то этакое прицепил и это считанное может легко тормознуть процесс на секунды … Начинается стенания, программисты правят в очередной раз код, окончательно превращая его в нечитаемый треш, менеджеры выкатывают дикие прайсы заказчику за добавление функционала, заказчик матерится и решает больше никогда не связываться со встроенными решениями.

(типа реклама и восхваление) А все почему? Потому что изначально было принято неправильное решение о платформе. Если есть возможность, мы предлагаем навороченную платформу даже для примитивных задач. По опыту стоимость разработки и поддержки потом оказываются гораздо ниже. Вот и сейчас для управления 8мю выходами я возьму STM32F3, который может работать на 72МГц. (шепотом) На самом деле просто у меня под рукой демоплата с ним (смаил). Была еще с L1, но мы ее нечаянно использовали в одном из проектов.
Открываем STM32Cube, выбираем плату, включаем галочку около FreeRTOS и собираем проект как обычно. Нам ничего этакого не надо, поэтому оставляем все по умолчанию.

Что такое FreeRTOS? Это операционная система почти реального времени для микроконтроллеров. То есть все, что вы слышали про операционные системы типа многозадачности, семафоров и прочих мутексов. Почему FreeRTOS? Просто ее поддерживает STM32Cube ;-). Есть куча других подобных систем – та же ChibiOS. По своей сути они все одинаковые, только различаются командами и их форматом. Тут я не собираюсь переписывать гору книг и инструкций по работе с операционными системами, просто пробегусь широкими мазками по наиболее интересным вещам, которые очень сильно помогают программистам в их нелегкой работе.
Z_h_e писал(а):А если нет кучи дел?
Обычно это в простых программах, типа мегания светодиодом. В более или менее сложной, дела обычно есть. А если их нет, то МК можно отправить спать. :)
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Мурик писал(а):Статья по теме https://habrahabr.ru/post/249273/
Статья ниАчом... Человек, обхаяв одну портянку кода, сделал другую, ничем не меньше, и при всём при этом, потратил на каждый мигающий светодиод по 610 байт оперативки.
Отличный пример, однако, ничего не скажешь ... :)))

Добавлено after 2 minutes 39 seconds:
Ах, да, ещё. Пришлось ещё вместо tiny взять STM32... Супер... :)))
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18793
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Мурик писал(а):Потому что если несколько задач выполняются друг за другом и
как говорится, дьявол кроется в деталях. в вашей фразе эта деталь - слово ЕСЛИ.

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

просто все эти ЕСЛИ чаще всего надуманные, а не реально существующие. как и бесконечная погоня за "экономией электроэнергии" - зачем МК спать, если он постоянно подключен к сетевому блоку питания, что норма минимум для 50% всех устройств?! это МОЖНО сделать, но отсюда не следует, что это НУЖНО делать. а попытка все-таки сделать порождает излишне "крутые" решения вроде протопотоков и ОС.

сколько сил многие тратят на асинхронный прием по USART команд и разбор их! решение с ОС потребует заметных расходов ОЗУ и FLASH, но это никого не смущает. а в то же самое время scanf и sscanf решили бы 90% проблем, но это "недопустимо", потому что scanf не отпускает цикл до разбора всех данных и отжирает 2К FLASH!!! где логика?! аналогично и с выводом.

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

Мой уютный бложик... заходите!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 960
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

И зачем ломать копья, если всё равно каждый пишет, как пишет?

Как пример, я делаю всё на конечных автоматах. Просто так научился и теперь получается писать именно так. Сложился определённый стереотип мышления.
Так вот, даже в простом проекте на STM8S003F3 с одним энкодером, дисплеем и уартом у меня шесть независтмых задач:
- обработка сигналов энкодера
- обработка длительности нажатия кнопки энкодера
- вывод информации на дисплей с кучей дополнительных режимов
- приём и передача по уарт физического уровня
- обработка протокола передачи логического уровня
- обработка действий пользователя
С ожиданиями у меня бы ничего не заработало. Прерывания применяются везде, где это оправдано.

Тогда о чём спорить? Как программист привык думать, так он и пишет программы.
Контактная информация:
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ARV",url="/forum/viewtopic.php?p=3352017#p3352017"][необходимость в распараллеливании процессов для очень большой части любительских проектов отсутствует в принципе[/uquote]
необходимость много в чем отсутствует. Можно, скажем, проекты не структурировать и даже на .h и .c файлы не делить. И писать в блокнотике, чоуштам.

деление на треды/задачи - просто один из подходов. Зачастую удобный для программиста. Вам он не нравится только потому, что надо еще в ОС вкурить?
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Тут же разговор идет, что делэй не является запрещенным вселенским злом, как считают некоторые, и никто не говорил что надр быдлокодить.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

не является, но неумеренное его применение ведёт к снижению производительности и иногда даже видимым "невооруженным глазом" тормозам. считаю (в первом приближении) чем меньше - тем лучше.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Ivanoff-iv писал(а):...но неумеренное его применение ведёт...
Неумеренно применить можно любой метод озвученный хоть из этого топика, хоть из раздела, хоть из всего интернета или из печатного издания. По-моему неумеренно - это и есть неумеренно, читай быдлокодство, и к какому-то конкретно методу отношения не имеет как таковому. Пословица есть даже по это дело, по молитву и тренировку лба :).
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

:) я могу и так и так написать, просто, в нехватку процессорного времени в какието моменты я упираюсь несколько чаще, чем в нехватку оперативы, потому чаще выбираю такой подход (ну ещё во флеш в тинях, бывает, упираюсь, но это другая история). а в общем...: всё в нашей жизни - компромисс, главное, чтобы он был в нашу пользу :))) :))) :)))
пс: на периферию посильные для неё задачи раскладывать умею (чтоб не сказали, что я всё АЛУ делать заставляю, потому и упирается).
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Так вот про то и речь ув. коллега. ИМХО, нельзя однозначно утверждать безапелляционно что-то есть запрещенное зло .
Борются тут, понимаешь за каждый такт и бит ресурса, а сами все на ЯВУ, да библиотеки, кое-кто еще ООП пытается :) Неувязочка :)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «Разные вопросы по МК»