Нубские вопросы, нюансы и не только...
- Войдите на сайт для отправки комментариев
День добрый всем! Создал эту тему, исходя из многих прочитанных статей про дуинку, из которых появляются всяческие мелкие вопросы, в связи с собственной относительной безграмотностью в данной теме, а авторы статей не всегда разжевывают все до мелочей... Конечно, можно закрыться в подвале (ну или записаться на курсы) и изучить Си, avr и прочее сопутствующее, а потом не задавать последующих вопросов, но, согласитесь, не всегда так получится сделать, да и не всегда со 100% результатом... Ну и как же "Закон пути наименьшего сопротивления" не упомянуть до кучи... Тут я прошу знающих по мере желания просто отвечать на иногда даже глупые вопросы, дабы наставить "неучей" на путь истинный. "Помогите написать скетч" сюда никак не относится... Итак, собственно, к чему я это все: набрел на статейку http://alxarduino.blogspot.ru/2013/08/delay.html где автор, можно сказать, критикует стандартный пример мигания диодиком без делэя... Возник сразу же первый вопрос по пункту "2. А зачем нам переменная для малых чисел?" Действительно ли целесообразно всегда имена пинов писать через define дабы это экономит как место, так и время процессора?
Думаю для новичка в первую очередь важно просто поморгать светодиодом, первый раз поприветсвовав таким образом мир и уж потом, набравшись немного опыта решить, где можно использовать делэй, а где нет. Данная платформа и разрабатывалась для того, чтоб была возможность очень быстрого старта без особых знаний электроники, умения паять, программировать, но имея огромное желание этому научиться. Тут недавно девушка спрашивала на форуме этом, где найти информацию по всей ленейке контроллеров Arduino, ее дочке задали такое домашнее задание в 4 классе.
Ну я, можно сказать, уже начинаю углубляться в нюансы всей системы и они мне периодически не дают спокойно писать код... Возникает вопрос "А почему я пишу так, если можно написать вот так и тоже будет работать? А может лучше именно так?"... А у кого спросить ответ на данный вопрос? Если нет знакомых, то остается либо перерыть кучу гугла с возможностью ничего не найти, либо спросить на форуме.
Каждый сам вибирает свой путь и решает, что хорошо именно для него.Аппетит приходит во время еды, а опыт во время работы. Когда человек устает наступать на грабли, он начинает их обходить. А по поводу вопросов, лично меня приучили с детсва искать ответы самостоятельно и думать своей головой, а не сидеть и ожидать пока кто то ответит на форуме. Но это мое личное мнение и я ни кому не пытаюсь его навязывать. Каждый человек индивидуален и волен поступать так, как считает нужным.
Просто когда на форуме ежедневно несколько раз в день разные люди создают темы с вопросом о том, что не заливается скетч, сначала очень терпеливо отвечаешь людям, потом начинаешь советовать воспользоваться поиском, а потом вообще начинаешь игнорировать такие темы, так как многие люди не удосуживаются прочитать уже существующие ответы в темах, как правило находящиеся в верхних строках страниц форума.
Правильно было бы оформить все подобные встречающиеся вопросы в темы и закрепить их в топе, но этим должен кто то заниматься. Тут есть люди, которым это не безразлично, которые создали темы и ежедневно их поддерживают, большой респект им за это, главное чтобы те, для кого были созданы эти темы их читали, а не плодили новые с одними и теми же вопросами.
Можно так-то долго дискутировать по написанному Вами тексту в мелочах, но в плане идеи - я с Вами согласен... Мой смысл темы в том, чтобы знающий помогали незнающим при желании... Если вопрос показался Вам слишком тупым или даже раздражающе-повседневным, то никто же не заставит Вас отвечать на него.. Вы просто его пропустите, а кто-то решит помочь, потратив минуту свободного времени за Спасибо... "Каждый сам выбирает свой путь": пробежаться трусцой до магазина за хлебом с пользой для здоровья и экономией для кошелька или нанять такси туда-обратно с противоположным эффектом... По мне оба способа хороши в разные моменты времени, особенно когда речь идет о его нехватки/экономии... Представьте ситуацию, что Вы собрали капельный полив на даче с помощью дуинки, все подключили, приготовились, но тест показал косяк в коде, который не можете найти, а Вам с утра уезжать и башка уже не работает... В такой момент я предпочтение отдам форуму в надежде, что кто-то поможет.. Это лишь один грубый пример и, действительно,спасибо всем тем, кто постоянно по-возможности помогает в подобных ситуациях...
Действительно ли целесообразно всегда имена пинов писать через define дабы это экономит как место, так и время процессора?
Нет, не всегда. Когда пин один - да. А допустим, Вам надо делать что-то с кучей пинов в цикле. Если номера пинов идут подряд, то можно в качестве номера пина использовать переменную цикла, а если не подряд? В этой ситуации их (номера пинов) удобно сложить в массив и ходить по массиву. Т.е. получается, что мы сложили их в память.
Евгений, а если так:
Такой вопрос. Когда мы пишем
const byte LED_13 = 13;
в памяти переменная LED_13 занимает один байт.
А если пишем
#define LED_13 13
при компиляции LED_13 подменяется 13, которое имеет тип int -- занимает в памяти 2 байта.
Так это? Я не имею ввиду мой пример.
Ну, во-первых, Вам никто не мешает написать
#define LED_13 ((byte)13)
а во-вторых, при компиляции константа 13 не будет занимать никакой памяти в области данных. Она будет вставлена в команду непосредственной загрузки константы в регистр и займёт один байт в памяти программы и всё. А вот переменная во-первых честно займём место в памяти данных, а в памяти программ ещё потребется место для команды записи константы из памяти данных в регистр.
Спасибо, Евгений, именно это я и хотел узнать.
Ну я, можно сказать, уже начинаю углубляться в нюансы всей системы и они мне периодически не дают спокойно писать код... Возникает вопрос "А почему я пишу так, если можно написать вот так и тоже будет работать? А может лучше именно так?"... А у кого спросить ответ на данный вопрос? Если нет знакомых, то остается либо перерыть кучу гугла с возможностью ничего не найти, либо спросить на форуме.
Есть еще вариаент
https://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F
Там всего 4 тома. Кстати когда я писАл проект базы по приватизации жилого фонда города, выступал и как манагер, аналитик и кодер. По результату общения с проф. программерами выяснилось, что все мои наработки в части аналитики по разработке структуры баз соответсвуют требованиям Кнута.
Представьте ситуацию, что Вы собрали капельный полив на даче с помощью дуинки, все подключили, приготовились, но тест показал косяк в коде, который не можете найти, а Вам с утра уезжать и башка уже не работает... В такой момент я предпочтение отдам форуму в надежде, что кто-то поможет.. Это лишь один грубый пример и, действительно,спасибо всем тем, кто постоянно по-возможности помогает в подобных ситуациях...
Я недавно на грабли наступал %)
Время считаем в миллисах, для отладки вывожу в секундах - делитель 1000.
Решил проверить как надо - в минутах - поставил делитель 60 0000. НЕ ПОКАЗЫВАЕТ! С полчаса долбился.
Потом понял - сигнед инт == 32к. А у меня 60к. Поставил лонг инт - все заработало.
В общем нужно МОЗГ ВКЛЮЧАТЬ.
По поводу "с утра уезжать". Прежде чем вводить в промышленную эксплуатацию - нужно провести тестирование, опытную или опытно-промышленную эксплуатаци. %)
На моей фабрике очень хорошо дрессируют в этом плане.
Действительно ли целесообразно всегда имена пинов писать через define дабы это экономит как место, так и время процессора?
Нет, не всегда. Когда пин один - да. А допустим, Вам надо делать что-то с кучей пинов в цикле. Если номера пинов идут подряд, то можно в качестве номера пина использовать переменную цикла, а если не подряд? В этой ситуации их (номера пинов) удобно сложить в массив и ходить по массиву. Т.е. получается, что мы сложили их в память.
Действительно, не всегда.
Если Вы определите строковую константу и используете ее в нескольких местах, она будет повторяться в памяти один раз, а если ее же определите через define, то повторяться будет столько раз, сколько раз Вы ее используете.
В общем, однозначного ответа на вопрос нет - в разных случаях будет по-разному. А чтобы отличить один случай от другого нужно:
- знать С,
- знать, как работает компилятор,
- знать принципы оптимизации кода,
- знать особенности архитектуры и системы команд конкретного процессора,
...
Кстати, оптимизация по объему кода, по объему используемой памяти и по скорости работы - это разные виды оптимизации, которые достигаются различными средствами и приводят к разным результатам, в частности, зачастую противоречат друг другу.
О таких "низкоуровневых" приемах оптимизации имеет смысл говорить только тога, когда:
- обнаруживается нехратка какого-либо ресурса,
- уже применены средства высокоуровневой (алгоритмической) оптимизации.
О таких "низкоуровневых" приемах оптимизации имеет смысл говорить только тога, когда:
- обнаруживается нехратка какого-либо ресурса,
- уже применены средства высокоуровневой (алгоритмической) оптимизации.
Я это здесь постоянно говорю и бьют меня здесь имеено за это. Глупо, по-дестки, но с большим апломбом. Вот погодите, сейчас набегут - достанется и Вам.