Да все верно выдал ваш осцилоскоп. 3 команды по 62.5 наносекунды. одна в 1, вторая в 0 и переход "взад" и это 5,33Мгц. Это предел для бесконечного цикла. Кому он такой нужен в практических целях? Как только ставите ограничение на "сколько надо дрыгов" - счетчик импульсов - добавляется ещё одна команда или 2 получите 4Мгц. Как только заворачиваете это дело в функцию - получаете 2 такта на параметр + 4 такта на вызов и 4 такта на возврат .. итого 14 тактов по 62.5 наносекунды для байтового параметра .. вот и весь сказ про осцилоскоп. :)
Ещё раз. Как только речь заходит об ОПТИМАЛЬНОМ программировании для микорконтроллеров (МК) - это ни разу не Wiring. А если пользуем Wiring, то вопросы "мрамора и штукатурки" по своей сути сводятся к решению задачи "как элегантнее левой пяткой почесать правое ухо". Особенно этот момент относится к соседней теме про перегрузку операций вывода в Serial через потоки С++.
P.S. Да, и если народ беспокоит, что "распиарил свою либу в каждом посту" .. как скажете. Писано было для вас, но раз "не требуется" как мне уже писали .. дальнейших обновлений на гитхабе не будет.
Вроде все, зрелые люди, а обиженки как в детском саду. Вы при конкретных примерах не ссылку на нее давайте, а фрагменты кода. Многоиндексного с лисапедом критиковали, но кто то пользуется, кто то нет. "У каждого свой вкус", сказал кот, вылизывая себе экстерьер.
Да, каюсь .. пришло с утра очередное письмо на тему "вы зачем это выставили? Хотите профи оставить без работы .. wiring это для дураков" .. с разного рода оскорблениями .. извиняюсь, под настроение получилось. :)
Многоиндексного с лисапедом критиковали, но кто то пользуется, кто то нет.
а, не было критики по сути алгоритма обработки работы кнопки.
была критика по оформлению всех переменных в классе как публичных.
ТС предлагал виртуальные методы.
что качественно не изменило бы работу класса никак от слова НИКАК.
поэтому нужно признать, что класс титановый велосипед для тактовой кнопки на данный момент является идеальным для ползателя любого уровня обарзования и не выдумывать гуманитарные придирки - нравится-ненравится.
*да, забыл - были свидетели непорочного зачатия, но я их всерьёз не воспринял.
Да, каюсь .. пришло с утра очередное письмо на тему "вы зачем это выставили? Хотите профи оставить без работы .. wiring это для дураков" .. с разного рода оскорблениями .. извиняюсь, под настроение получилось. :)
оставь их(профи) без работы - пусть сдохнут с голоду. :D
«Никогда такого не было, и вот опять!» В.С. Черномырдин
Тема об эффективности, как всегда выродилась в подсчёт тактов и безапелляционные заявления о том, что Wiring писали «дураки для дураков» и пользоваться им нельзя.
Я, конечно, может и дурак, но пользуюсь digitalWrite как-то спокойно и абсолютно не парюсь. За мою практику мне всего лишь дважды попадались проекты*, в которых реально надо было считать такты и «выжимать все соки». Во всех остальных проектах ресурсов МК вполне хватало, чтобы не думать ни о тактах, ни о wiring.
Поскольку тема для начинающих, обращаюсь к ним.
Коллеги, относитесь к заявлениям типа «ни в жисть не пользовать Wiring» спокойно и с головой. Посмотрите на свой проект и ответьте себе на вопрос, а правда ли Вам так уж критично сколько там тактов 2, 200 или 2000? Уверяю Вас для «хрен знает сколько целых и столько же десятых» процентов проектов это абсолютно фиолетово! Да, для остальных «100 – хрен знает сколько целых и столько же десятых»% это важно, но Вы подумайте о своём конкретном проекте, а не о гипотетических ситуациях.
Рассуждения же о том, что «wiring пользовать нельзя» без указания в каком именно проекте, напоминает смертельный холивар о том, что лучше: мерседес-кабриолет или камаз с фурой между парнями, одному из которых нужно девочку покатать, а другому – партию холодильников перевезти.
---------------------------
*Речь о хоббийных проектах на ардуино, а не о бортовых вычислителях.
Вот грамотная реализация того, что я тут "пиарил" на С++. Это и есть то самое "применение Template" о котором пишу. С ЭТОГО и должен был начинаться Wiring "для начинающих". И всё это можно легко упрятать внутрях, не показывая новичку вовсе. :)
Поддержу ЕвгенийП, если мы посмотрим на предлагаемые здесь проекты, то обнаружим, что 90% из них можно свести к трем категориям: термостат, светорегулятор и управление мощной нагрузкой. При нормальном планировании, МК основное время занят гонянием loop и подсчетом таймингов до очередной проверки и смысл здесь считать такты?
Вот грамотная реализация того, что я тут "пиарил" на С++. Это и есть то самое "применение Template" о котором пишу. С ЭТОГО и должен был начинаться Wiring "для начинающих". И всё это можно легко упрятать внутрях, не показывая новичку вовсе. :)
Совсем не понятны причины восторга от статьи. Автор сразу пляшет на известных граблях.
Цитата:
1. Препроцессор
Способов использования препроцессора для работы с портами в МК существует великое множество.
....................................
В итоге при использовании препроцессора для манипуляций с портами ввода-вывода мы получаем:
Простоту и ясность для простых вещей – очень просто написать пару макросов, чтоб поморгать светодиодом.
Высокую скорость и компактность кода при отказе от универсальности (все ножки в одном порту и желательно по порядку).
Не расходуется дополнительная память.
Содержащий большое количество битовых операций код достаточно сложно читать.
Можно сделать универсально и относительно переносимо пожертвовав размером и скоростью кода (побитовый вывод).
Для управления несколькими однотипными устройствами придется дублировать код.
2. Передача порта через указатель.
Как уже выяснили один из основных недостатков пи работе с портами ввода-вывода с помощью препроцессора это сложность использования однотипных устройств.
..................
Итого:
Удобно использовать для подключения многих однотипных устройств, требующих не много линий ввода-вывода.
Нет необходимости в дублировании кода.
Можно менять порт и линии подключения устройства во время выполнения программы.
Низкая скорость доступа к портам.
Большой размер кода.
Требуется дополнительная память для хранения указателя на порт и битовых масок.
Неудобно и неэффективно работать с большим количеством линий ввода-вывода.
Разжевано у него конечно подробнейше, а что в итоге? Либо "Высокую скорость" и "Для управления несколькими однотипными устройствами придется дублировать код." Либо "Нет необходимости в дублировании кода" и "Низкая скорость". Чего мы с Вами тут не знали?!
Далее варианты многопиновые, виртуальный порт, с верным выводом "Манипуляции с отдельными битами неэффективны."
Далее С++.
Проблема в общем озвучена верно
Цитата:
1. Логика работы с устройством должна быть отделена от способа его подключения.
2. Не должно быть дублирования кода при подключении многих однотипных устройств.
3. Эффективно работать с отдельными битами.
4. Эффективно работать с многобитовыми значениями.
5. Решение должно быть переносимо на разные аппаратные платформы.
6. Не должно использоваться дополнительная память.
7. Легкость написания и сопровождения кода.
8. Реализация полностью на стандартном Си++.
Но п.1 расплывчатый, п.3 и п.4 допустим как или-или, п.5 в общем игнор, т.к. когда потребуется достаточно легко решаем, п.6 надо уточнять и оговаривать отдельно.
А дальше появляется
"//Установить биты в порту PORT |= value;
static void Set(DataT value);"
Заметим он статический. Это хороше. Все унаследованое от него будет вместо вызова функции содержать одну команду и тоже быть статическим. Значить снова - одно устройство, один код, второе устройство - новый класс с новым Set-ом из этого же шаблона и сново повтор кода. Далее многопиновость, традиционные знаменитые извращения в стиле С++ ))).
В итоге - нет решения. Проблема "максимум скорости"&"дублирование кода" принципиально не решаема в чистом виде. Возможен только компромис. И весь вопрос как его сделать грамотно.
ПС. На будущее, давайте точней указанее на то, что интересно, читать "простыни" давно понятного не интересно.
Перечитайте сами простыни. Как понимаю, эта либа уже как 6 лет юзается для генерации кода близкого или даже лучшего чем ассемблерное писалово. Всё там есть с 1 по последний пункт. Больше того, на гитхабе есть релизы под несколько разных архитектур и для texas Instruments и для STM и для AVR. В т.ч. и для разных компиляторов, в т.ч. и avr-gcc. :)
Концовка для тех, кто в танке:
Подведём итоги.
Цели поставленные перед реализацией ввода-вывода для МК на Си++ были достигнуты в полной мере. Достигнута как эффективность манипуляций с многобитовыми значениями, так и отдельными линиями ввода-вывода. Списки линий, как и код их использующий, полностью изолированы от конкретной реализации портов. Чтобы добавить новый способ подключения (например через SPI расширитель портов) устройства использующего списки линий, или портировать его на другое семейство МК, достаточно написать соответствующий класс реализующий интерфейс порта ввода-вывода.
Единственными существенными недостатками этого подхода является относительная сложность реализации списков линий (но ведь они уже написаны) и необходимость изучения языка Си++.
Я как раз перечитал. И даже вник. А Вы? Нет там ничего толкового по предмету. Обзор существующего плюс извраты С++. Местами извраты очень хороши, в плане техники владения шаблонами и остроумия вподходе, но не более. Вы его либы пользуете 6 лет? Можете продемонстрировать быстрый вывод из его либ без дублирования кода для нескольких устройст? Я не собир изучать мегабайтные "выхлоп" чтоб очередной раз убедится в невозможности невозможного. Здесь возможен только хороше продуманный компромис, а автор статьи это не осознает. Увы...
ПС. Еще раз прошу. Ссылки более предметно, тратить свое время в пустую больше не намерен, жду пример на основе этой либки, дизасемблер предметного места тогда и продолжим.
Как видим издержки на вызов - 3 ldd (один из них данные, так что в реале - 2) и icall ну и ret. В вызванной функции все кратко. switch можно убрать, тогда вместо одной функции надо 4 соответственно. Будет чуть быстрей но это не принципиально. На этом я и успокоюсь)) Дискусию закончил. Всем привет!
что за куски кода вы привели .. ничё не понял .. но, тут виден дефайн для конструктора класса .. то есть идея с темплейтами и интерфейсами вам стала понятна. Верно? :)
Ув. ЕвгенийП, ну вот я такой как раз начинающий, подскажите что я делал не так?
Купил летом starter kit на Arduino Mega 2560 R3 , и первым делом попробовал примеры: поморгал светодиодом, покрутил серводвигатель с потенциометра, почитал, подключил ультразвуковой датчик, слегка помучался но подсоединил входящий в набор LCD1602. Да, размер скетчей поначалу не вызывал вопросов ну 2,3..4 там килобайта, наверное так и должно быть. Потом из примеров собрал свой первый скетч и ужаснулся его размеру 21 килобайт на всего-то несколько библиотек и простенькую программку! Я же ещё ничего не написал даже!
Пользуюсь сейчас тем что написал Arhat109-2 и огромное ему спасибо. Скетч из 850 строк программы, с кучей датчиков и прерываний занимает около 4000 байт.
Вот я и хочу вас спросить: Как мне добится такого же эффекта при использовании типовой библиотеки? Очень жду ваши советы.
Дополню для конкретики:
Подключаем 1 серву для датчика HCSR-04, сам датчик, 2 простых мотора с энкодерами и делаем так: машинка крутит датчиком и запоминает расстояния +-180грд с шагом 6грд (30шт), находит свободный проезд на 30см и шириной не менее 20см и едет в него. При этом по мере движения она уточняет датчиком расстояния только по ширине прохода и пересчитывает положение найденных расстояний согласно тому что уже проехала. То есть поддерживает актуальность предыдущих измерений. Если по завершению движения прямо ехать нельзя, то ищет новый проезд или возвращается обратно. Во время движения надо ещё следить за энкодерами и выравнивать скорости двигателей, чтобы получилось движение по прямой.
Очень жду от Вас рекомендации как используя Wiring такой скетч упихать в занимаемые им сейчас 2.5 килобайта (с выводом на LCD выбранного направления), потому что хочу перенести его на меньшую плату.
Дополню. В программировании не силен, было только в ВУЗе немного Паскаля и С, но это было уже давно, лет 10 назад. То что вы тут приводите, мне мало понятно как китайская грамота. Но очень интересно читать, всем участникам дискусси и ТС - мои благодарности.
Очень жду от Вас рекомендации как используя Wiring такой скетч упихать в занимаемые им сейчас 2.5 килобайта (с выводом на LCD выбранного направления), потому что хочу перенести его на меньшую плату.
Напрасно ждёте :)
Если Вы поняли мой пост №109 как совет цепляться за wiring - таки нет. Это был совет всегда исходить их нужд своег проекта, а не из того, какие там цифири после компиляции пишутся. Если Вас устраивает как сейчас работает, не вижу никаких оснований переходить на что-то другое, разве что Вам совсем уж заняться нечем.
Так что вопрос не "как упихать?", а "зачем упихивать?". По мне, так незачем, если всё работает и всё устраивает.
Тут как раз недавно, кто-то поднимал тему как упихать робота-картографа во флеш Mini .. "не лезет" с таким Wiring. Да и просто поиском фразы "как уменьшить размер скетча", "не хватает памяти" и т.п. - с завидной регулярностью. :)
Кстати, Wiring кушает оперативу не хуже флеша .. уже приводил примеры со скрытой "буферизацией" данных. Про дисплейные либы - ваще надо молчать .. по килобайту только на буфер экрана.
ЕвгенийП, и почему меня это не удивляет? В смысле ваш отказ помочь начинающему юзверю .. Вы предлагаете "изящно чесать левое ухо правой пяткой" .. поскольку "рук" вы предварительно лишены кривостью реализации Wiring и большинства библиотек к нему и на нем (часто как следствие). Кстати, в сети много кто об этом пишет, но видимо такие как Вы участники "суперкрутых" встреч и форумов об этом не знают..
Извините, но я вам не верю после таких высказываний "за" Wiring. Сильно сомневаюсь в вашей реальной квалификации после предложений "не подскажу, вам не надо - не пользуйтесь".. сильно рекомендую, для начала, активно поучаствовать в темах по означенным поисковым запросам "не влезает", "как уменьшить" .. прежде чем что-то рекомендовать начинающим. Ваши посты вызывают сильное недоверие, уж извините.
Кстати да. Я ваш пост тоже понял именно так. Как совет "цепляться" за Wiring.
Так вроде он сам справился .. и вроде бы вовсе не рекомендую Wiring а где-то даже наоборот .. :)
Нельзя вести речь про "алгоритмическую оптимизацию" и тем более для МК, когда львиная доля ресурсов жрется "базовым инструментом".
Для примеру, все тот же TWI недавно писанный. Можно наверное алгоритмически оптимизировать какое-то его пользование, безотносительно к реализации .. но, я сейчас пользуюсь "своей версией" и она способна пахать на скоростях 800кгц и не жрать 70 байт оперативы (это экономия только скрытой буферизации в twi.c! про Wire.h даже молчу), ведя при этом логирование передач и занимая миниум памяти не смотрел, байт 200 максиум ..
но что "оно даст"? Можно ли сэкономить сожранные под буферизацию объемы памяти и под избыточный код на этом улучшении? А поднять скорость до 800? Сильно сомневаюсь. А если даже и можно, то кто помешает мне этим "улучшенным" алгоритмом воспользоваться на этой "компактной" реализации? Интерфейс - это стандарт обмена.
Вот. Как-то так с отсутствием "рук". Сплошная "эквилибристика" чесания уха пяткой. :)
Я к тому, что прежде чем вести речь про алгоритмическую оптимизацию - надо иметь нормальный инструмент, позволяющий ощутить от неё выгоду.
Кстати да. Я ваш пост тоже понял именно так. Как совет "цепляться" за Wiring.
Значит, Вы просто нихрена не поняли из того, что я пишу.
Очевидно, моя вина - плохо объяснял.
Arhat109-2 пишет:
ваш отказ помочь начинающему юзверю
А разве он нуждается в помощи? У него всё, как я понял, работает. А то, что ему из эстетических соображений хочется что-то куда-то впихать - так это "хочется - пусть впихивает".
Arhat109-2 пишет:
видимо такие как Вы участники "суперкрутых" встреч и форумов об этом не знают..
Разумеется. Где уж нам. Мне такая позиция хорошо знакома - дураки все, кроме Вас. Спорить не буду. Вполне возможно, так оно и есть.
Ну извините, раз уж обидел. Значит сам тормоз, что ни хрена не понял .. Вы тему с чего начали? С ненужности "кодоптимизации" вроде как. Нет? А в качестве примеров что привели? Разного рода банальности, да ещё и не соответствующие результату. Вам это ещё на первой странице показали куда как наглядно. Ну и? Где ваши хваленые "алгоритмические оптимизации"? Третья страница идет .. как не было так и нет.
И НЕ БУДЕТ. По той самой причине: Wiring не заточен.
Нет никакого смысла искать "крутой алгоритм" в задачах управления железяками у которых стандарт обращения к ним прописан в даташитах, да в условиях когда "базовый инструмент" способен занять 66% всей памяти, как тут указали выше. Ну найдете вы что-то из ряда вон выходящее .. вместо 33% оставшихся оно займет пусть даже 5% .. перевести код на МК "меньшего класса" с двое меньшей памятью оно вам не позволит по-любому. Нет, я - не прав? :)
А вот реализация грамотного базового инструмента позволяет из 66% сделать 10% .. что существенно снижает проблему ресурсов и не менее существенно расширяет круг задач. Так может сюда направить усилия, знания и опыт, нет? Я опять не прав? :)
Вы тему с чего начали? С ненужности "кодоптимизации" вроде как. Нет?
Нет, не так. Вы действительно нихрена не поняли.
Я начал с того, что есть два подхода к оптимизации. Один даёт выигрыш на проценты, другой на порядки. Я нигде не писал, что каким-то пользовать не нужно. А ещё я показал, что некоторые распространённых "оптимизации" спокойно выполняются компилятором и не нужно делать их самому.
Другое дело, что я призывал всегда думать о том, что даёт та или иная оптимизация для решения поставленной задачи. В посте №109, так прямо сказано, что походить надо "с головой", а не отвергать что-то с порога.
Arhat109-2 пишет:
да ещё и не соответствующие результату.
Результаты у меня приведены в замерах времени. Отрицать их невозможно, да и глупо.
Arhat109-2 пишет:
Вам это ещё на первой странице показали куда как наглядно.
Не заметил. Рассуждения про "некоторые процессоры", когда я говорил о конкретном - это флуд.
Arhat109-2 пишет:
Ну и? Где ваши хваленые "алгоритмические оптимизации"? Третья страница идет .. как не было так и нет.
И не будет. В первом посте был пример. Вам нужны ещё? Пишите сами.
Arhat109-2 пишет:
По той самой причине: Wiring не заточен.
Какое вообще отношение wiring имеет к построению алгоритмов? Вы боретесь с wiring - боритесь на здоровье. Мне это неинтересно. В тех проектах, где ресурсы были критичны, я просто писал программу в лоб, вообще без среды. А разводить огород ради мигания светодиодом - это по Вашей части - я и wiring'ом помигаю. Пусть занимает столько ресурсов, сколько ему нужно, если их хватает.
Arhat109-2 пишет:
Нет никакого смысла искать "крутой алгоритм"
Это Ваше мнение. Оно безграмотно, но спорить я не буду.
Arhat109-2 пишет:
перевести код на МК "меньшего класса" с двое меньшей памятью оно вам не позволит по-любому. Нет, я - не прав? :)
Вы по-прежнему не понимаете о чём я здесь говорю. Для того, чтобы сказать правы Вы или не правы не хватает данных. А именно, не хватает информации о цели разработчика. Если перед разработчиком стоит цель перейти на меньший МК, он должен об этом думать. А если цель, чтобы работало на том МК, что есть и оно работает, так пусть оно занимает хоть 100% памяти. Какая разница?
Arhat109-2 пишет:
А вот реализация грамотного базового инструмента позволяет из 66% сделать 10% .. что существенно снижает проблему ресурсов и не менее существенно расширяет круг задач.
Сделать 66% вместо 10% не может быть целью (разве что "ради спортивного интереса"). Цель - чтобы устройство работало. И если цель достигнута, то 66 там процентов или 99 - меня не волнует абсолютно.
Arhat109-2 пишет:
Так может сюда направить усилия, знания и опыт, нет?
Направляйте куда хотите, мы свободные люди в свободной стране. Я направляю свои услия на то, чтобы разрабатываемые устройства работали и отвечали предъявляемым требованиям. Вы - на борьбу с wiring и доказательство того, что у Вас длинее - ради Бога, я не возражаю
------------
Ещё раз, самое главное, чего Вы у меня не можете понять: вы бросаетесь в холивар как будто бы я отрицаю кодовую оптимизацию. Да, Господь с Вами, я не отрицаю ничего, что требуется для достижения цели разработки. Я отрицаю "оптимизацию ради оптимизации" и утверждаю, что подходить ко всему надо с головой! Если мой проект влазит в имеющиеся ресурсы и при этом занимает 99% памяти, я и пальцем не шевельну, чтобы сделать 98% - мне это не надо. А вот если не влазит, тогда я напишу его по-другому. Всё делается исходя из задачи, а тратить усилия, чтобы на экране было написано 10%, а не 66% считаю глупостью. Но если Вам нравится тратить силы на это - ради Бога, я Вам ничего не запрещаю и не навязываю.
Ну значит я ни хрена не понял. Развлекайтесь далее с "оптимизацией" помазыванием кучки сверху .. эквилибристика "как чесать задней лапкой переднее ушко" - в свою очередь не интересует меня. Раз "если оно работает, то и ладно", а на то что тысячи начинающих учатся ПЛОХОМУ на ПЛОХОМ инструментарии Вам - "пофиг", то это не моя тема.
Развлекайтесь дальше, я Вас действительно не понял. Мне показалось, что вы решились научить новичков чему-то полезному. Извините, раз уж ошибся.
Не извиняйтесь, бывает. А вот за что "пасть порву" - это за то, что я кого-то плохому учу. Чему это я плохому кого-то обучил? Данное завления расцениваю, как бездоказательный и безответсвенный бред. Из того, что Вам что-то непонятно, ещё не следует, что оно плохое. Я же говрил, что надо подходить "с головой". Не заставляйте меня думать, что как раз с этим у Вас напряжёнка.
Я как раз не Вас лично имел ввиду, а ситуацию "в целом": есть откровенно плохой инструмент. совсем новичкам "сойдет и он", и благо что он для них ваще есть, но популярность этого инструмента - уже достаточно высокая, чтобы утверждать то, что пишу: он плохой и вынужденно учит людей плохим подходам программирования. Что каждый вменяемый прогер видит наглядно. Посмотрите типовые заголовки тем и поднимающиеся в них вопросы. Одно и тоже .. годами. И часто от одних и тех же.
То что Вы взялись за "этюды" - наверное может стать "благом" .. хотя, тема про потоковый вывод - есть явно "не айс", ибо кучеряво писать исходный код - не есть самоцель. Он ещё и в МК влезть должен .. а там "тонким слоем поверх наверченного" .. для обычных систем - "угу, красяво", а для МК - зло. Эта тема .. увы, с вашей стороны не только НЕ затронула важные вопросы оптимизации скетчей, но и получила противодействие с вашей стороны... что, согласитесь - несколько напрягает.
Но имхо, куда как важнее предоставить этим уже "не совсем новичкам" - нормальный инструмент, который судя по словам логика, да и вашим и глядя в свои "закрома" - каждый вменяемый прогер уже давно сделал для себя сам (потому и были ваши слова мне: "не востребовано"! Конечно.. такую фигню каждый способен себе слепить на коленке). А равно, придать этим "не совсем новичкам" правильное направление и "вектор тяги" при создании новых библиотек .. собственно, вся вторая да и часть третьей страницы тут - куда как наглядно демонстрируют НЕПОНИМАНИЕ принципов построения таких либ для МК. Вот, мне кажется в этом направлении "копать этюды" надо. Нет? :)
правильное направление и "вектор тяги" при создании новых библиотек ..
"не совсем новички" и "создатели новых библиотек" не та аудитория для которой пишутся этюды. Потоковый вывод - просто урок по языку. И урок неплохой, чтобы Вы не говорили. "Не совсем новичкам" он не нужен, но и не для них писано.
Arhat109-2 пишет:
Вот, мне кажется в этом направлении "копать этюды" надо. Нет? :)
Для "не совсем новичков", возможно и надо. Только "этюды" не для них. Если Вы хотите писать цикл этюдов для "не совсем новичков" - пишите. Я пишу просто уроки языка, использования компилятора, базовых приёмов программирования и т.п.
Следующий этюд будет о работе с ОЗУ: new, malloc, объявления на стеке и т.п. Можете там отписаться, что Вы знаете (или даже разработали) более продвинутую систему управления памятью, чем та, что есть в avr-libc - Ваше право, только я буду рассматривать именно её. То, что есть другие, да есть - но это не тема этюда.
Для профи я тоже, кстати, пишу, но не здесь, а в журналах типа "Программирование" и "Суперкомпьютеры" - там пишется о другом, по-другому и для другой аудитории. Не смешивать же всё в кучу.
ЕвгенийП, Arhat109-2 я конечно понимаю что в споре рождается истина. Но сразу вам скажу, если на этом этапе возникли разногласия то лучше воздержаться от взаимных упреков и перехода на личности. Ничего хорошего это не принесет. Я далек от программирования, мне ближе экономика, тоже расчеты и цифры, но в несколько иной плоскости.
Вот приведу пару примеров которые как мне казалось очень просты и понятны всем, всех же в школе учили считать, даже программы учебные очень одинаковы, и цифры арабские, но.....
Предистория. У нас на предприятии уважают рацпредложения, и именно те которые несут предприятию прибыль. За них платят единоразово 10% от годовой экономии, которую принесет внедрение рацпредложения.
1 История. Один Сотрудник, без имен обойдемся, просто Сотрудник, внес предложение которое удешевляло изготовление детали на 1 рубль. Так как деталей в год выпускаем примерно миллион, то экономия как не трудно посчитать 1 миллион рублей в год. Причем материальных затрат не было никаких, только изменения алгоритма работы оборудования, как следствие увеличение производительности и уменьшение отходов. Расчет показал что экономия действительно составляет 1 миллин рублей. Все проверили, протестировали, рассчитали премию в 100 тысяч рублей и выплатили. Все вроде бы логчно и всем понятно. И тут он приходить через месяц примерно и говорит - вот мне жена (бухгалтер) сказала что меня обманули. Мне должны были заплатить не 100 а 200 тысяч. Потому как первый миллион мы экономим когда производим эту деталь, а второй когда продаем, потому как цену продажи не изменили. И вот казалось бы где он не прав? Догадайтесь! В итоге как ни доказывали, убедить не смогли. Человек обиделся и уволился.
2 История по следам первой. Через пару лет другой Сотрудник узнав что за оптимизацию платят неплохо, сам думать не стал, а взял идею первого сотрудника и решил ее модернизировать, как Эдисон лампочку. Но не учел что основная экономия была за счет уменьшения отходов, а не за счет оптимизации алгоритма работы оборудования. В итоге еще более оптимально настроил оборудование. Экономия составила в год 100 тысяч рублей. То есть премии полагается 10 тысяч. Когда он узнал про сумму то очень возмутился. Как так Первому сотруднику оплатили 100 тысяч а мне всего 10! Грабеж! Говорим если ты вообще выбросишь из производственного процесса работу оборудования то сэкономишь 300 тысяч в год, то есть максимальная премия это 30 тысяч. Но это нереально, уберешь процесс, не будет производится деталь вообще. Эти доводы его не убедили. И что думаете? Он тоже уволился обиженным.
То есть даже такие простые вещи люди не могут трактовать одинаково. И убедить их нет никакой возможности. Люди не глупые, инженеры, высшее образование. А мы тут пытаемся о сложном спорить. Мне кажется спорить надо именно когда будет практическое применение. А пока теория. изучай, применяй, тестируй.
И какой резюм - нет смысла обяснять друг другу вещи на которые у вас разные взгляды. А тем более не надо из за этого конфликтовать.
Давайте просто делится идеями. А брать на вооружение какуюто идею или нет это личное дело каждого.
Я как раз не Вас лично имел ввиду, а ситуацию "в целом": есть откровенно плохой инструмент. совсем новичкам "сойдет и он", и благо что он для них ваще есть, но популярность этого инструмента - уже достаточно высокая, чтобы утверждать то, что пишу: он плохой и вынужденно учит людей плохим подходам программирования.
Тут вы неправы в корне! Для чего плохой? Для профессионалов? Да может и так. Но он не для них. Я думаю если мне водителю с 20 летним стажем доверить самолет я на нем далеко не улечу, если вообще смогу взлететь :-)
Скажу про себя, я тоже лет 5 назад начал смотреть на AVR в плане реализации идей для умного дома. Купил программатор, накачал продвинутых IDE и итог? А дальше? А дальше все сложно. То есть это все путь специалиста для которого это направление является основным. А не просто хобби как для меня. Ну хорошо упрусь я сделаю устройство. Много таких же как я смогут его повторить? Нет. А модернизировать, переделать под свои нужды, нет. И какой смысл? Профессионал все сделает и лучше меня, а любителю мои разработки будут бесполезны.
А вот Ардуино очень хорошо подходит для так называемого DIY. То есть я сделал, написал какие модули купить выложил схему, скетч. Какая вероятность того что любитель повтроит мою конструкцию? Думаю довольно высокая. Это доказывают некоторые публикации в проектах, когда один любитель публикует. Другие берут и используют. И чем меньше вмешательства в стандартные модули и в среду разработки тем вероятность выше.
То есть у меня не стоит задача виртуозно программировать, ни сил ни времени нет на это. А вот делать так чтобы работало и меня устраивало я могу. И мне для этого не нужно прилагать массу усилий и тратить много времени. То есть я использую Ардуино и его IDE с максимальным КПД для себя.
Поэтому как говориться что русскому хорошо то немцу смерть :-)
Мой совет остановитесь детальнее на паре: глобалы - локалы. Ибо это не так очевидно как кажется. И оба метода "предоставлены компилятором". О них не надо заботится прогеру специально (конструкторы, деструкторы, утечка памяти и пр.). Особенно на затраты на локалы в виде не только занимаемой памяти но и процессов помещения их туда, особенно в приложении к МК, а не системам "общего назначения", ибо специфика: .. часто глобал (пин, регистр устройства и т.п.) читается из памяти(!) и суется как параметр на стек, а потом тащится из метода в метод.. чего вполне можно и не делать. Пихать номер пина в память - тянет хвост из этой же оперы.
Вы забыли об уже значительной части подросших "профессионалов", которые кропают на wiring вполне промышленные поделки .. и считают такой подход "нормой". про что можно много чего (не)лестного почитать в сети..
Arhat109-2, очевидно Вы родились с серебрянной ложкой во рту, поздравляю, потому что Вы, судя по распальцовке, сразу начали писать оптимальные тексты, потому мы, в отличии от Вас, видимо ошибочно считаем, что начинать нужно с простого, пускай и не всегда оптимального, а не с изучения внутренностей синхрофазатрона. На счет пейсателей в промышленных масштабах, так они на свои грабли наступят, не беспокойтесь, когда заказчики обломаются, тогда всё и кончится, а не кончится, пусть и дальше пишут, разводят лохов-заказчиков на бабло, нам учить заказчиков как тратить их бабло?
Новичок, если он действительно хочет чему то научиться, он научится. И этому не помогут и не помешают наши "советы". Я не говорю, при этом, что они НЕ повлияют, конечно повлияют. Разумеется если он не тупой и у него есть в голове что-то, а не просто мосК, он вырастет, как специалист и без нас.
Вы забыли об уже значительной части подросших "профессионалов", которые кропают на wiring вполне промышленные поделки .. и считают такой подход "нормой". про что можно много чего (не)лестного почитать в сети..
Нет не забыл. Просто в данный момент я пишу не для них.
Невозможно написать материал одинаково интересный профессионалу и тому, для кого сообщение "a is not declared in this scope" является проблемой, достойной публикации вопроса на форуме. Нельзя объять необъятного.
Вы читали Джерома про часы? Там шикарный диалог:
- Странные у Вас часы. Показывают дату, день недели, фазу Луны, а который час не показывают!
- С какой стати? Часы не обязаны всё показывать!
Так что если Вы хотите написать материал для "писателей библиотек" - пишите. Я же Вам не запрещаю. Но не требуйте от меня, чтобы я его писал. Я пишу то, что интересно писать мне. А Вы - что Вам. И всем будет хорошо.
:) просто у меня были отличные учителя. Ершов П.П. в частности и лично.
Первая моя прога на С - это компилятор из книжки Риччи с модификацией ряда синт. диаграмм. Пришел этакий свежеиспеченный спец. в НИИ .. и даже не прогер, а так, оптик. А ему завлаб с порога: "будешь писать на С и АСМ" .. ?!? а это хто такое? А в ответ: вот тебе книжка, там есть компилятор с этого языка .. сделаешь, но вот с таким изменением .. и заместо работы .. бывший студент три месяца перепиливал компилятор из Риччи. Заодно и язык освоил .. так с тех пор привычка и осталась знакомится с новым инструментом подобным способом. :)
:) просто у меня были отличные учителя. Ершов П.П. в частности и лично.
Простите мою безграмотность, а кто это? Я в пору своей молодости имел честь быть знакомым с Андреем Петровичем Ершовым, а П.П. Ершов - я только писателя такого знаю. Над чем он работал? Основные труды? Поделитесь ссылочкой.
Да господа, тему "Этюдов для начинающих" превратили в писькометрию программистов. Каждый должен сам пройти по своим граблям, а потом начинают слышать и думать, если есть чем.
Блин, ну что Вы на самом деле. Новосибирск, НГУ, Минск-222М, Фортран-2 и программки с грифом UG - Under Ground. Конечно же Андрей Петрович. "Babubi" - помните? :)
Вот читал я всё внимательно. Кое-чего понятно, кое-где ясно о чём говорят, но нет представления во что оно выльется. В целом тема полезная. Несмотря на.
Но вот один вопрос мне спать спокойно не даёт и практически лишает аппетита: неужели найдётся такой мчудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino?
По моему личному мнению - ничего сложнее стиральной машинки на ней делать нельзя.
Если чо - я новичок, про существование ардуины узнал два года назад, и если авторитетные товарищи скажут, что коллайдер на ардуине собран - поверю.
Но вот один вопрос мне спать спокойно не даёт и практически лишает аппетита: неужели найдётся такой мчудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino?
Если для проекта хватит ресурсов Atmegi, то почему нет? Мои контроллеры пленочных полов, думаю и вовсе на тиньке смастрячены, а цена при старом баксе по 2,5тыров за штуку, сколько их продается только по Раше предположить боюсь, и что? Работают себе четвертый год.
А использование дуин в проекте, за исключением типа про мини (если десятками штамповать), это полный бред.
Тот, кто утверждает что на 16Мгц МК ногодрыг работает с 8Мгц - неправ однозначно.
Как я указывал выше, мой осциллограф старенький и может ошибаться, но при шаге по горизонтали 0,1 мкс он выдал следующую картинку:
Да все верно выдал ваш осцилоскоп. 3 команды по 62.5 наносекунды. одна в 1, вторая в 0 и переход "взад" и это 5,33Мгц. Это предел для бесконечного цикла. Кому он такой нужен в практических целях? Как только ставите ограничение на "сколько надо дрыгов" - счетчик импульсов - добавляется ещё одна команда или 2 получите 4Мгц. Как только заворачиваете это дело в функцию - получаете 2 такта на параметр + 4 такта на вызов и 4 такта на возврат .. итого 14 тактов по 62.5 наносекунды для байтового параметра .. вот и весь сказ про осцилоскоп. :)
Ещё раз. Как только речь заходит об ОПТИМАЛЬНОМ программировании для микорконтроллеров (МК) - это ни разу не Wiring. А если пользуем Wiring, то вопросы "мрамора и штукатурки" по своей сути сводятся к решению задачи "как элегантнее левой пяткой почесать правое ухо". Особенно этот момент относится к соседней теме про перегрузку операций вывода в Serial через потоки С++.
P.S. Да, и если народ беспокоит, что "распиарил свою либу в каждом посту" .. как скажете. Писано было для вас, но раз "не требуется" как мне уже писали .. дальнейших обновлений на гитхабе не будет.
Вроде все, зрелые люди, а обиженки как в детском саду. Вы при конкретных примерах не ссылку на нее давайте, а фрагменты кода. Многоиндексного с лисапедом критиковали, но кто то пользуется, кто то нет. "У каждого свой вкус", сказал кот, вылизывая себе экстерьер.
Да, каюсь .. пришло с утра очередное письмо на тему "вы зачем это выставили? Хотите профи оставить без работы .. wiring это для дураков" .. с разного рода оскорблениями .. извиняюсь, под настроение получилось. :)
Многоиндексного с лисапедом критиковали, но кто то пользуется, кто то нет.
Да, каюсь .. пришло с утра очередное письмо на тему "вы зачем это выставили? Хотите профи оставить без работы .. wiring это для дураков" .. с разного рода оскорблениями .. извиняюсь, под настроение получилось. :)
оставь их(профи) без работы - пусть сдохнут с голоду. :D
Как я указывал выше, мой осциллограф старенький и может ошибаться, но при шаге по горизонтали 0,1 мкс он выдал следующую картинку:
arduinec,
у моего есть функция частотометра. Вечером доберусь до дома, загружу Ваш скетч и выложу скриншот. "Не переключайтесь!" :)
В.С. Черномырдин
Тема об эффективности, как всегда выродилась в подсчёт тактов и безапелляционные заявления о том, что Wiring писали «дураки для дураков» и пользоваться им нельзя.
Я, конечно, может и дурак, но пользуюсь digitalWrite как-то спокойно и абсолютно не парюсь. За мою практику мне всего лишь дважды попадались проекты*, в которых реально надо было считать такты и «выжимать все соки». Во всех остальных проектах ресурсов МК вполне хватало, чтобы не думать ни о тактах, ни о wiring.
Поскольку тема для начинающих, обращаюсь к ним.
Коллеги, относитесь к заявлениям типа «ни в жисть не пользовать Wiring» спокойно и с головой. Посмотрите на свой проект и ответьте себе на вопрос, а правда ли Вам так уж критично сколько там тактов 2, 200 или 2000? Уверяю Вас для «хрен знает сколько целых и столько же десятых» процентов проектов это абсолютно фиолетово! Да, для остальных «100 – хрен знает сколько целых и столько же десятых»% это важно, но Вы подумайте о своём конкретном проекте, а не о гипотетических ситуациях.
Рассуждения же о том, что «wiring пользовать нельзя» без указания в каком именно проекте, напоминает смертельный холивар о том, что лучше: мерседес-кабриолет или камаз с фурой между парнями, одному из которых нужно девочку покатать, а другому – партию холодильников перевезти.
---------------------------
* Речь о хоббийных проектах на ардуино, а не о бортовых вычислителях.
http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikrokontrollero...
Вот грамотная реализация того, что я тут "пиарил" на С++. Это и есть то самое "применение Template" о котором пишу. С ЭТОГО и должен был начинаться Wiring "для начинающих". И всё это можно легко упрятать внутрях, не показывая новичку вовсе. :)
Поддержу ЕвгенийП, если мы посмотрим на предлагаемые здесь проекты, то обнаружим, что 90% из них можно свести к трем категориям: термостат, светорегулятор и управление мощной нагрузкой. При нормальном планировании, МК основное время занят гонянием loop и подсчетом таймингов до очередной проверки и смысл здесь считать такты?
https://github.com/KonstantinChizhov/AvrProjects ссылка на гитхаб автора. Наслаждайтесь. :)
Ну и для начинающих: http://easyelectronics.ru/category/avr-uchebnyj-kurs/page/5 читать с 5 к 1 странице. Есть всё. Статьи с этого сайта есть смысл перепостить сюда в раздел для начинающих.
Перечитайте сами простыни. Как понимаю, эта либа уже как 6 лет юзается для генерации кода близкого или даже лучшего чем ассемблерное писалово. Всё там есть с 1 по последний пункт. Больше того, на гитхабе есть релизы под несколько разных архитектур и для texas Instruments и для STM и для AVR. В т.ч. и для разных компиляторов, в т.ч. и avr-gcc. :)
Концовка для тех, кто в танке:
Подведём итоги.
Цели поставленные перед реализацией ввода-вывода для МК на Си++ были достигнуты в полной мере. Достигнута как эффективность манипуляций с многобитовыми значениями, так и отдельными линиями ввода-вывода. Списки линий, как и код их использующий, полностью изолированы от конкретной реализации портов. Чтобы добавить новый способ подключения (например через SPI расширитель портов) устройства использующего списки линий, или портировать его на другое семейство МК, достаточно написать соответствующий класс реализующий интерфейс порта ввода-вывода.
Единственными существенными недостатками этого подхода является относительная сложность реализации списков линий (но ведь они уже написаны) и необходимость изучения языка Си++.
© Константин Чижов
Перечитайте сами простыни.
Я как раз перечитал. И даже вник. А Вы? Нет там ничего толкового по предмету. Обзор существующего плюс извраты С++. Местами извраты очень хороши, в плане техники владения шаблонами и остроумия вподходе, но не более. Вы его либы пользуете 6 лет? Можете продемонстрировать быстрый вывод из его либ без дублирования кода для нескольких устройст? Я не собир изучать мегабайтные "выхлоп" чтоб очередной раз убедится в невозможности невозможного. Здесь возможен только хороше продуманный компромис, а автор статьи это не осознает. Увы...
ПС. Еще раз прошу. Ссылки более предметно, тратить свое время в пустую больше не намерен, жду пример на основе этой либки, дизасемблер предметного места тогда и продолжим.
Ок. Но придется подождать .. не многозадачен. :(
Ок. Но придется подождать .. не многозадачен. :(
ха! С указателями на функции еще прикольней получается! Скетча кусок, целый даже работает
В либе. Дефайник громоздковат, может шаблоном красивей будет.
В ассемблере смотрим
Как видим издержки на вызов - 3 ldd (один из них данные, так что в реале - 2) и icall ну и ret. В вызванной функции все кратко. switch можно убрать, тогда вместо одной функции надо 4 соответственно. Будет чуть быстрей но это не принципиально. На этом я и успокоюсь)) Дискусию закончил. Всем привет!
что за куски кода вы привели .. ничё не понял .. но, тут виден дефайн для конструктора класса .. то есть идея с темплейтами и интерфейсами вам стала понятна. Верно? :)
Это базовый класс устройства. В дефайне обявляются функции вывода, создается обект базового класса и инициализируется указателями функций вывода.
Как обещал, выкладываю результаты теста скетча от arduinec.
Скетч (копипаста из моего IDE - надеюсь, ничего не напутал?). Плата - Arduino Nano.
В моём IDE включены warning'и компилятора (по-умолчанию почему-то выключены). В процессе компиляции был warning
Результат работы (копипаста - осциллограф умеет по USB на компьютер передавать):
Т.е. частотометр показал 2,67МГц
Nano на 8Мгц, так? :)
Ув. ЕвгенийП, ну вот я такой как раз начинающий, подскажите что я делал не так?
Купил летом starter kit на Arduino Mega 2560 R3 , и первым делом попробовал примеры: поморгал светодиодом, покрутил серводвигатель с потенциометра, почитал, подключил ультразвуковой датчик, слегка помучался но подсоединил входящий в набор LCD1602. Да, размер скетчей поначалу не вызывал вопросов ну 2,3..4 там килобайта, наверное так и должно быть. Потом из примеров собрал свой первый скетч и ужаснулся его размеру 21 килобайт на всего-то несколько библиотек и простенькую программку! Я же ещё ничего не написал даже!
Пользуюсь сейчас тем что написал Arhat109-2 и огромное ему спасибо. Скетч из 850 строк программы, с кучей датчиков и прерываний занимает около 4000 байт.
Вот я и хочу вас спросить: Как мне добится такого же эффекта при использовании типовой библиотеки? Очень жду ваши советы.
Дополню для конкретики:
Подключаем 1 серву для датчика HCSR-04, сам датчик, 2 простых мотора с энкодерами и делаем так: машинка крутит датчиком и запоминает расстояния +-180грд с шагом 6грд (30шт), находит свободный проезд на 30см и шириной не менее 20см и едет в него. При этом по мере движения она уточняет датчиком расстояния только по ширине прохода и пересчитывает положение найденных расстояний согласно тому что уже проехала. То есть поддерживает актуальность предыдущих измерений. Если по завершению движения прямо ехать нельзя, то ищет новый проезд или возвращается обратно. Во время движения надо ещё следить за энкодерами и выравнивать скорости двигателей, чтобы получилось движение по прямой.
Очень жду от Вас рекомендации как используя Wiring такой скетч упихать в занимаемые им сейчас 2.5 килобайта (с выводом на LCD выбранного направления), потому что хочу перенести его на меньшую плату.
Заранее благодарю за ваши рекомендации.
Дополню. В программировании не силен, было только в ВУЗе немного Паскаля и С, но это было уже давно, лет 10 назад. То что вы тут приводите, мне мало понятно как китайская грамота. Но очень интересно читать, всем участникам дискусси и ТС - мои благодарности.
Очень жду от Вас рекомендации как используя Wiring такой скетч упихать в занимаемые им сейчас 2.5 килобайта (с выводом на LCD выбранного направления), потому что хочу перенести его на меньшую плату.
Напрасно ждёте :)
Если Вы поняли мой пост №109 как совет цепляться за wiring - таки нет. Это был совет всегда исходить их нужд своег проекта, а не из того, какие там цифири после компиляции пишутся. Если Вас устраивает как сейчас работает, не вижу никаких оснований переходить на что-то другое, разве что Вам совсем уж заняться нечем.
Так что вопрос не "как упихать?", а "зачем упихивать?". По мне, так незачем, если всё работает и всё устраивает.
Arduino Mega 2560 R3 ... ужаснулся его размеру 21 килобайт
перенести его на меньшую плату
На Arduino Mega 2560 R3 ужасаться нечему - там этот счет занял менее 10% флеш-памяти.
На Arduino Nano он займёт 66% флеш-памяти, что тоже не критично.
Более важным ресурсом в Arduino является оперативная память (в Nano 2 Кб).
Тут как раз недавно, кто-то поднимал тему как упихать робота-картографа во флеш Mini .. "не лезет" с таким Wiring. Да и просто поиском фразы "как уменьшить размер скетча", "не хватает памяти" и т.п. - с завидной регулярностью. :)
Кстати, Wiring кушает оперативу не хуже флеша .. уже приводил примеры со скрытой "буферизацией" данных. Про дисплейные либы - ваще надо молчать .. по килобайту только на буфер экрана.
ЕвгенийП, и почему меня это не удивляет? В смысле ваш отказ помочь начинающему юзверю .. Вы предлагаете "изящно чесать левое ухо правой пяткой" .. поскольку "рук" вы предварительно лишены кривостью реализации Wiring и большинства библиотек к нему и на нем (часто как следствие). Кстати, в сети много кто об этом пишет, но видимо такие как Вы участники "суперкрутых" встреч и форумов об этом не знают..
Извините, но я вам не верю после таких высказываний "за" Wiring. Сильно сомневаюсь в вашей реальной квалификации после предложений "не подскажу, вам не надо - не пользуйтесь".. сильно рекомендую, для начала, активно поучаствовать в темах по означенным поисковым запросам "не влезает", "как уменьшить" .. прежде чем что-то рекомендовать начинающим. Ваши посты вызывают сильное недоверие, уж извините.
Кстати да. Я ваш пост тоже понял именно так. Как совет "цепляться" за Wiring.
Так что вопрос не "как упихать?", а "зачем упихивать?". По мне, так незачем, если всё работает и всё устраивает.
Поддерживаю.
отказ помочь начинающему юзверю
А что мешает самому броситься на помощь новичку?
Так вроде он сам справился .. и вроде бы вовсе не рекомендую Wiring а где-то даже наоборот .. :)
Нельзя вести речь про "алгоритмическую оптимизацию" и тем более для МК, когда львиная доля ресурсов жрется "базовым инструментом".
Для примеру, все тот же TWI недавно писанный. Можно наверное алгоритмически оптимизировать какое-то его пользование, безотносительно к реализации .. но, я сейчас пользуюсь "своей версией" и она способна пахать на скоростях 800кгц и не жрать 70 байт оперативы (это экономия только скрытой буферизации в twi.c! про Wire.h даже молчу), ведя при этом логирование передач и занимая миниум памяти не смотрел, байт 200 максиум ..
но что "оно даст"? Можно ли сэкономить сожранные под буферизацию объемы памяти и под избыточный код на этом улучшении? А поднять скорость до 800? Сильно сомневаюсь. А если даже и можно, то кто помешает мне этим "улучшенным" алгоритмом воспользоваться на этой "компактной" реализации? Интерфейс - это стандарт обмена.
Вот. Как-то так с отсутствием "рук". Сплошная "эквилибристика" чесания уха пяткой. :)
Я к тому, что прежде чем вести речь про алгоритмическую оптимизацию - надо иметь нормальный инструмент, позволяющий ощутить от неё выгоду.
Кстати да. Я ваш пост тоже понял именно так. Как совет "цепляться" за Wiring.
Значит, Вы просто нихрена не поняли из того, что я пишу.
Очевидно, моя вина - плохо объяснял.
ваш отказ помочь начинающему юзверю
А разве он нуждается в помощи? У него всё, как я понял, работает. А то, что ему из эстетических соображений хочется что-то куда-то впихать - так это "хочется - пусть впихивает".
видимо такие как Вы участники "суперкрутых" встреч и форумов об этом не знают..
Ну извините, раз уж обидел. Значит сам тормоз, что ни хрена не понял .. Вы тему с чего начали? С ненужности "кодоптимизации" вроде как. Нет? А в качестве примеров что привели? Разного рода банальности, да ещё и не соответствующие результату. Вам это ещё на первой странице показали куда как наглядно. Ну и? Где ваши хваленые "алгоритмические оптимизации"? Третья страница идет .. как не было так и нет.
И НЕ БУДЕТ. По той самой причине: Wiring не заточен.
Нет никакого смысла искать "крутой алгоритм" в задачах управления железяками у которых стандарт обращения к ним прописан в даташитах, да в условиях когда "базовый инструмент" способен занять 66% всей памяти, как тут указали выше. Ну найдете вы что-то из ряда вон выходящее .. вместо 33% оставшихся оно займет пусть даже 5% .. перевести код на МК "меньшего класса" с двое меньшей памятью оно вам не позволит по-любому. Нет, я - не прав? :)
А вот реализация грамотного базового инструмента позволяет из 66% сделать 10% .. что существенно снижает проблему ресурсов и не менее существенно расширяет круг задач. Так может сюда направить усилия, знания и опыт, нет? Я опять не прав? :)
Вы тему с чего начали? С ненужности "кодоптимизации" вроде как. Нет?
Нет, не так. Вы действительно нихрена не поняли.
Я начал с того, что есть два подхода к оптимизации. Один даёт выигрыш на проценты, другой на порядки. Я нигде не писал, что каким-то пользовать не нужно. А ещё я показал, что некоторые распространённых "оптимизации" спокойно выполняются компилятором и не нужно делать их самому.
Другое дело, что я призывал всегда думать о том, что даёт та или иная оптимизация для решения поставленной задачи. В посте №109, так прямо сказано, что походить надо "с головой", а не отвергать что-то с порога.
Нет никакого смысла искать "крутой алгоритм"
Сделать 66% вместо 10% не может быть целью (разве что "ради спортивного интереса"). Цель - чтобы устройство работало. И если цель достигнута, то 66 там процентов или 99 - меня не волнует абсолютно.
Направляйте куда хотите, мы свободные люди в свободной стране. Я направляю свои услия на то, чтобы разрабатываемые устройства работали и отвечали предъявляемым требованиям. Вы - на борьбу с wiring и доказательство того, что у Вас длинее - ради Бога, я не возражаю
------------
Ещё раз, самое главное, чего Вы у меня не можете понять: вы бросаетесь в холивар как будто бы я отрицаю кодовую оптимизацию. Да, Господь с Вами, я не отрицаю ничего, что требуется для достижения цели разработки. Я отрицаю "оптимизацию ради оптимизации" и утверждаю, что подходить ко всему надо с головой! Если мой проект влазит в имеющиеся ресурсы и при этом занимает 99% памяти, я и пальцем не шевельну, чтобы сделать 98% - мне это не надо. А вот если не влазит, тогда я напишу его по-другому. Всё делается исходя из задачи, а тратить усилия, чтобы на экране было написано 10%, а не 66% считаю глупостью. Но если Вам нравится тратить силы на это - ради Бога, я Вам ничего не запрещаю и не навязываю.
Ну значит я ни хрена не понял. Развлекайтесь далее с "оптимизацией" помазыванием кучки сверху .. эквилибристика "как чесать задней лапкой переднее ушко" - в свою очередь не интересует меня. Раз "если оно работает, то и ладно", а на то что тысячи начинающих учатся ПЛОХОМУ на ПЛОХОМ инструментарии Вам - "пофиг", то это не моя тема.
Развлекайтесь дальше, я Вас действительно не понял. Мне показалось, что вы решились научить новичков чему-то полезному. Извините, раз уж ошибся.
Не извиняйтесь, бывает. А вот за что "пасть порву" - это за то, что я кого-то плохому учу. Чему это я плохому кого-то обучил? Данное завления расцениваю, как бездоказательный и безответсвенный бред. Из того, что Вам что-то непонятно, ещё не следует, что оно плохое. Я же говрил, что надо подходить "с головой". Не заставляйте меня думать, что как раз с этим у Вас напряжёнка.
Я как раз не Вас лично имел ввиду, а ситуацию "в целом": есть откровенно плохой инструмент. совсем новичкам "сойдет и он", и благо что он для них ваще есть, но популярность этого инструмента - уже достаточно высокая, чтобы утверждать то, что пишу: он плохой и вынужденно учит людей плохим подходам программирования. Что каждый вменяемый прогер видит наглядно. Посмотрите типовые заголовки тем и поднимающиеся в них вопросы. Одно и тоже .. годами. И часто от одних и тех же.
То что Вы взялись за "этюды" - наверное может стать "благом" .. хотя, тема про потоковый вывод - есть явно "не айс", ибо кучеряво писать исходный код - не есть самоцель. Он ещё и в МК влезть должен .. а там "тонким слоем поверх наверченного" .. для обычных систем - "угу, красяво", а для МК - зло. Эта тема .. увы, с вашей стороны не только НЕ затронула важные вопросы оптимизации скетчей, но и получила противодействие с вашей стороны... что, согласитесь - несколько напрягает.
Но имхо, куда как важнее предоставить этим уже "не совсем новичкам" - нормальный инструмент, который судя по словам логика, да и вашим и глядя в свои "закрома" - каждый вменяемый прогер уже давно сделал для себя сам (потому и были ваши слова мне: "не востребовано"! Конечно.. такую фигню каждый способен себе слепить на коленке). А равно, придать этим "не совсем новичкам" правильное направление и "вектор тяги" при создании новых библиотек .. собственно, вся вторая да и часть третьей страницы тут - куда как наглядно демонстрируют НЕПОНИМАНИЕ принципов построения таких либ для МК. Вот, мне кажется в этом направлении "копать этюды" надо. Нет? :)
правильное направление и "вектор тяги" при создании новых библиотек ..
"не совсем новички" и "создатели новых библиотек" не та аудитория для которой пишутся этюды. Потоковый вывод - просто урок по языку. И урок неплохой, чтобы Вы не говорили. "Не совсем новичкам" он не нужен, но и не для них писано.
Вот, мне кажется в этом направлении "копать этюды" надо. Нет? :)
Для "не совсем новичков", возможно и надо. Только "этюды" не для них. Если Вы хотите писать цикл этюдов для "не совсем новичков" - пишите. Я пишу просто уроки языка, использования компилятора, базовых приёмов программирования и т.п.
Следующий этюд будет о работе с ОЗУ: new, malloc, объявления на стеке и т.п. Можете там отписаться, что Вы знаете (или даже разработали) более продвинутую систему управления памятью, чем та, что есть в avr-libc - Ваше право, только я буду рассматривать именно её. То, что есть другие, да есть - но это не тема этюда.
Для профи я тоже, кстати, пишу, но не здесь, а в журналах типа "Программирование" и "Суперкомпьютеры" - там пишется о другом, по-другому и для другой аудитории. Не смешивать же всё в кучу.
ЕвгенийП, Arhat109-2 я конечно понимаю что в споре рождается истина. Но сразу вам скажу, если на этом этапе возникли разногласия то лучше воздержаться от взаимных упреков и перехода на личности. Ничего хорошего это не принесет. Я далек от программирования, мне ближе экономика, тоже расчеты и цифры, но в несколько иной плоскости.
Вот приведу пару примеров которые как мне казалось очень просты и понятны всем, всех же в школе учили считать, даже программы учебные очень одинаковы, и цифры арабские, но.....
Предистория. У нас на предприятии уважают рацпредложения, и именно те которые несут предприятию прибыль. За них платят единоразово 10% от годовой экономии, которую принесет внедрение рацпредложения.
1 История. Один Сотрудник, без имен обойдемся, просто Сотрудник, внес предложение которое удешевляло изготовление детали на 1 рубль. Так как деталей в год выпускаем примерно миллион, то экономия как не трудно посчитать 1 миллион рублей в год. Причем материальных затрат не было никаких, только изменения алгоритма работы оборудования, как следствие увеличение производительности и уменьшение отходов. Расчет показал что экономия действительно составляет 1 миллин рублей. Все проверили, протестировали, рассчитали премию в 100 тысяч рублей и выплатили. Все вроде бы логчно и всем понятно. И тут он приходить через месяц примерно и говорит - вот мне жена (бухгалтер) сказала что меня обманули. Мне должны были заплатить не 100 а 200 тысяч. Потому как первый миллион мы экономим когда производим эту деталь, а второй когда продаем, потому как цену продажи не изменили. И вот казалось бы где он не прав? Догадайтесь! В итоге как ни доказывали, убедить не смогли. Человек обиделся и уволился.
2 История по следам первой. Через пару лет другой Сотрудник узнав что за оптимизацию платят неплохо, сам думать не стал, а взял идею первого сотрудника и решил ее модернизировать, как Эдисон лампочку. Но не учел что основная экономия была за счет уменьшения отходов, а не за счет оптимизации алгоритма работы оборудования. В итоге еще более оптимально настроил оборудование. Экономия составила в год 100 тысяч рублей. То есть премии полагается 10 тысяч. Когда он узнал про сумму то очень возмутился. Как так Первому сотруднику оплатили 100 тысяч а мне всего 10! Грабеж! Говорим если ты вообще выбросишь из производственного процесса работу оборудования то сэкономишь 300 тысяч в год, то есть максимальная премия это 30 тысяч. Но это нереально, уберешь процесс, не будет производится деталь вообще. Эти доводы его не убедили. И что думаете? Он тоже уволился обиженным.
То есть даже такие простые вещи люди не могут трактовать одинаково. И убедить их нет никакой возможности. Люди не глупые, инженеры, высшее образование. А мы тут пытаемся о сложном спорить. Мне кажется спорить надо именно когда будет практическое применение. А пока теория. изучай, применяй, тестируй.
И какой резюм - нет смысла обяснять друг другу вещи на которые у вас разные взгляды. А тем более не надо из за этого конфликтовать.
Давайте просто делится идеями. А брать на вооружение какуюто идею или нет это личное дело каждого.
Я как раз не Вас лично имел ввиду, а ситуацию "в целом": есть откровенно плохой инструмент. совсем новичкам "сойдет и он", и благо что он для них ваще есть, но популярность этого инструмента - уже достаточно высокая, чтобы утверждать то, что пишу: он плохой и вынужденно учит людей плохим подходам программирования.
Тут вы неправы в корне! Для чего плохой? Для профессионалов? Да может и так. Но он не для них. Я думаю если мне водителю с 20 летним стажем доверить самолет я на нем далеко не улечу, если вообще смогу взлететь :-)
Скажу про себя, я тоже лет 5 назад начал смотреть на AVR в плане реализации идей для умного дома. Купил программатор, накачал продвинутых IDE и итог? А дальше? А дальше все сложно. То есть это все путь специалиста для которого это направление является основным. А не просто хобби как для меня. Ну хорошо упрусь я сделаю устройство. Много таких же как я смогут его повторить? Нет. А модернизировать, переделать под свои нужды, нет. И какой смысл? Профессионал все сделает и лучше меня, а любителю мои разработки будут бесполезны.
А вот Ардуино очень хорошо подходит для так называемого DIY. То есть я сделал, написал какие модули купить выложил схему, скетч. Какая вероятность того что любитель повтроит мою конструкцию? Думаю довольно высокая. Это доказывают некоторые публикации в проектах, когда один любитель публикует. Другие берут и используют. И чем меньше вмешательства в стандартные модули и в среду разработки тем вероятность выше.
То есть у меня не стоит задача виртуозно программировать, ни сил ни времени нет на это. А вот делать так чтобы работало и меня устраивало я могу. И мне для этого не нужно прилагать массу усилий и тратить много времени. То есть я использую Ардуино и его IDE с максимальным КПД для себя.
Поэтому как говориться что русскому хорошо то немцу смерть :-)
Не, я вас уже понял ..<удалено самоцензурой>..
Мой совет остановитесь детальнее на паре: глобалы - локалы. Ибо это не так очевидно как кажется. И оба метода "предоставлены компилятором". О них не надо заботится прогеру специально (конструкторы, деструкторы, утечка памяти и пр.). Особенно на затраты на локалы в виде не только занимаемой памяти но и процессов помещения их туда, особенно в приложении к МК, а не системам "общего назначения", ибо специфика: .. часто глобал (пин, регистр устройства и т.п.) читается из памяти(!) и суется как параметр на стек, а потом тащится из метода в метод.. чего вполне можно и не делать. Пихать номер пина в память - тянет хвост из этой же оперы.
Вы забыли об уже значительной части подросших "профессионалов", которые кропают на wiring вполне промышленные поделки .. и считают такой подход "нормой". про что можно много чего (не)лестного почитать в сети..
Arhat109-2, очевидно Вы родились с серебрянной ложкой во рту, поздравляю, потому что Вы, судя по распальцовке, сразу начали писать оптимальные тексты, потому мы, в отличии от Вас, видимо ошибочно считаем, что начинать нужно с простого, пускай и не всегда оптимального, а не с изучения внутренностей синхрофазатрона. На счет пейсателей в промышленных масштабах, так они на свои грабли наступят, не беспокойтесь, когда заказчики обломаются, тогда всё и кончится, а не кончится, пусть и дальше пишут, разводят лохов-заказчиков на бабло, нам учить заказчиков как тратить их бабло?
Новичок, если он действительно хочет чему то научиться, он научится. И этому не помогут и не помешают наши "советы". Я не говорю, при этом, что они НЕ повлияют, конечно повлияют. Разумеется если он не тупой и у него есть в голове что-то, а не просто мосК, он вырастет, как специалист и без нас.
Вы забыли об уже значительной части подросших "профессионалов", которые кропают на wiring вполне промышленные поделки .. и считают такой подход "нормой". про что можно много чего (не)лестного почитать в сети..
Нет не забыл. Просто в данный момент я пишу не для них.
Невозможно написать материал одинаково интересный профессионалу и тому, для кого сообщение "a is not declared in this scope" является проблемой, достойной публикации вопроса на форуме. Нельзя объять необъятного.
Вы читали Джерома про часы? Там шикарный диалог:
- Странные у Вас часы. Показывают дату, день недели, фазу Луны, а который час не показывают!
- С какой стати? Часы не обязаны всё показывать!
Так что если Вы хотите написать материал для "писателей библиотек" - пишите. Я же Вам не запрещаю. Но не требуйте от меня, чтобы я его писал. Я пишу то, что интересно писать мне. А Вы - что Вам. И всем будет хорошо.
:) просто у меня были отличные учителя. Ершов П.П. в частности и лично.
Первая моя прога на С - это компилятор из книжки Риччи с модификацией ряда синт. диаграмм. Пришел этакий свежеиспеченный спец. в НИИ .. и даже не прогер, а так, оптик. А ему завлаб с порога: "будешь писать на С и АСМ" .. ?!? а это хто такое? А в ответ: вот тебе книжка, там есть компилятор с этого языка .. сделаешь, но вот с таким изменением .. и заместо работы .. бывший студент три месяца перепиливал компилятор из Риччи. Заодно и язык освоил .. так с тех пор привычка и осталась знакомится с новым инструментом подобным способом. :)
Это было не вам. Читал. В оригинале ржачнее на порядок. :)
:) просто у меня были отличные учителя. Ершов П.П. в частности и лично.
Простите мою безграмотность, а кто это? Я в пору своей молодости имел честь быть знакомым с Андреем Петровичем Ершовым, а П.П. Ершов - я только писателя такого знаю. Над чем он работал? Основные труды? Поделитесь ссылочкой.
Да господа, тему "Этюдов для начинающих" превратили в писькометрию программистов. Каждый должен сам пройти по своим граблям, а потом начинают слышать и думать, если есть чем.
Блин, ну что Вы на самом деле. Новосибирск, НГУ, Минск-222М, Фортран-2 и программки с грифом UG - Under Ground. Конечно же Андрей Петрович. "Babubi" - помните? :)
Да господа, тему "Этюдов для начинающих" превратили в писькометрию программистов.
а каждый Программист мог бы спасти одного и более ДУМАЮЩЕГО начинающего......
Вот читал я всё внимательно. Кое-чего понятно, кое-где ясно о чём говорят, но нет представления во что оно выльется. В целом тема полезная. Несмотря на.
Но вот один вопрос мне спать спокойно не даёт и практически лишает аппетита: неужели найдётся такой
мчудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino?По моему личному мнению - ничего сложнее стиральной машинки на ней делать нельзя.
Если чо - я новичок, про существование ардуины узнал два года назад, и если авторитетные товарищи скажут, что коллайдер на ардуине собран - поверю.
Но вот один вопрос мне спать спокойно не даёт и практически лишает аппетита: неужели найдётся такой
мчудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino?Если для проекта хватит ресурсов Atmegi, то почему нет? Мои контроллеры пленочных полов, думаю и вовсе на тиньке смастрячены, а цена при старом баксе по 2,5тыров за штуку, сколько их продается только по Раше предположить боюсь, и что? Работают себе четвертый год.
А использование дуин в проекте, за исключением типа про мини (если десятками штамповать), это полный бред.
Ok.
Я оказался неправильно понят, уточняю. Речь не идёт о чипах производства Atmel. Речь идёт об Arduino.
В комплексе, так сказать, с средой разработки и схемными решениями.