PinBoard + Arduino

Несколько дней назад стукнула мне в голову идея попробовать Arduino, что это такое и с чем его едят. Скачал Arduino IDE разобрался в нем, посмотрел несколько туториалов и мне понравилось. Теперь пришла пора покупать саму ардуину, но так как оно стоит много баксов, мне стало влом, решил запилить сам. Пошел на радио рынок и прикупил совместимую из Arduino ATmega168PA и еще набрел на книженцыю автора Улли Соммера «Программирование микроконтроллерных плат Arduino\Freeduino» которою тоже приобрел. Дома вытравил переходник из корпуса TQFP на бредборд.


Подключил все это дело проводами к Пинборду и занялся прошивкой Ардуиновского бутлоадера.


И что дальше, а ничего! Скомпиленые скетчи отказывались заливаться в мою поделку, руки опускались. Благо есть форум где мне частично помогли решить проблему. Ставил я бутлоадер от Arduino diecimila, который почему-то не захотел принимать данные из UARTa Пинборда, на что собственно и убил полтора дня. Но тут решил прошить бут от Arduino NANO168 который сразу заработал и моему счастью не было придела. Залил бегом образцовый скетч из миганием светодиода, вдоволь на мигавшесь светиком, решил что надо что то по серьезней и без стандартных образцов. Так как выучить мне ни ассемблер ни С, не удалось, есть только базовые знания, была у меня мечта идиота запустить LCD дисплей на пинборде. Но надо было что то выводить на дисплей, а не только любоваться «hello world». И тут я заметил в углу моего стола аналоговый акселерометр ADXL335, который на меня жадно смотрел.

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

3,3 вольт взято из шины питания Пинборда (так как аксель на 3,3)
Analog input0 (A0)--ось X
Analog input1 (A1)--ось Y
Analog input2 (A2)--ось Z

Еще короткое видео роботы всей этой электроники.


Заключения:
Лично для себя сделал выводы, что все св’язаное из ардуино легко в использовании, что человек из минимальными знаниями программирования может за два часа написать скетч и легко запустить какую-нибудь игрушку или запилить на ардуино независимое устройство.
Всем успехов в ваших поисках правды!

P.S Это моя первая статья, прошу сильно не критиковать, дабы не отбить желания писать еще :))

Материал для статьи взят из:
етого, там видео уроки по ардуино на русском.
sanguino.cc
И еще заинтересовало ето
Также книга Улли Соммера «Программирование микроконтроллерных плат Arduino\Freeduino»
Также мой скетч в атаче.

Update:
Благодаря пользователю JustACat удалось подключить всю эту бадягу к родному контролеру Пинборда. Так же внесены незначительные изменения в код скетчя.
  • +2
  • 24 марта 2012, 20:26
  • Leon11t
  • 1
Файлы в топике: Accelerometer_to_LCD.zip

Комментарии (188)

RSS свернуть / развернуть
Забавно, сколько тут обсуждали о том, что далеко не все, сев на ардуино, переходят потом на самодельные платы и т.п. А тут — тут как раз наоборот, судя по всему :)

Ну я как раз ардуино средой и пользуюсь, когда что-то быстро накидать надо. При этом бутлодырь ихний не юзаю — имхо это все же трата места, которого в 168 меге не так и много. Программатор ведь есть, зачем бутлодырь? Просто перенастроил среду ардуино, чтобы она скетчи заливала через программатор, и усе, никакого бутлодыря, и лишних несколько килобайт места.

А вообще гуд! У меня руки так и не доходят до запайки всех этих мелких корпусов, хотя несколько лежат для пробы…
0
Килобайт? ЕМНИП он жалкие полкило жрет.
0
Ну… Посмотрел сейчас в самой среде ардуино, бутлодырь откусывает 2 кило на 168 меге…
0
Вот тут вот пруф: arduino.cc/en/Hacking/Bootloader
The current bootloaders (i.e. the ones included in Arduino 0009) are almost identical for the Diecimila and NG (with ATmega168). They both run at 19200 baud and take up 2 KB of flash memory on the ATmega168.
0
Ну значит я смотрел старую версию бута.
0
Не, я просто вообще в буте не вижу смысла особого, на таких мелкокамнях… Бут — это чтобы просто обновлять прошивку… А просто ли? Ну относительно, ибо надо 3 провода вместо 6. Да. А какие еще преимущества? Не нужен программатор? Так елки, все равно надо переходник для ком-порта :) И что там может понадобиться так часто обновлять? Ну запилил я там часы какие, термометр на этой 168 меге, прошил раз, ну может два-три. И пусть себе работают.

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

Но это все строго мое скромное имхо :) Так что сморить ни с кем не буду :)
0
Ну относительно, ибо надо 3 провода вместо 6
Скорее 2 вместо 4. Земля не в счет.
Но бут все же удобнее, на мой взгляд.Тут правда еще играет роль то, что у меня нет нормального программатора, умеющего отваливаться от схемы. Встроенный в пниборд это не умеет.
0
Ну например я использую бут для отладки приложений, которые юзают юарт на пинборде. Причем прошивка льется в 2 клика. Для меня это стало актуальным, когда я начал писать программу для общения с мегой по юарту на C++ builder 6. До этого юзал SPI программатор и JTAG, но именно на пинборде не досталяет удовольствие постоянно перетыкать с JTAGа на UART и обратно. Можно конечно сделать отдельный(железный)COM порт, но до этого не доходят руки, но и зачем лишние провода? :) И как написал Vga, большинство SPI программаторов не отпускают линию ресета после заливки прошивки, что тоже постоянные лишние телодвижения. Тем более что памяти современных МК хватает слихвой(тиньки не в счет), так почему бы не использовать бутлоадер?
0
Заметьте, я говорил именно про маленькие МК, у которых «памяти с лихвой» не бывает ;) Про большие я тоже сказал, что бут — очень даже да.
Ну и собственно, никто не отменял частные случаи, вот у вас он, вам так удобнее по тому-то и поэтому-то. Так что да, все верно.
А мой программатор отпускает резет ;) И вообще никак не мешает работе целевой платы. Прошивка льется в 1 клик в ардуинке. Зачем два? Но это нифига не хвастовство или дразнилки, это просто вот так сложилась моя ситуация, у вас не так :)

Но вот ценное замечание: при наличии бута мы льем через уарт, а значит по тем же проводам можем и отладочную гнать — это верно и правда полезно. Полностью согласен.
Собственно поэтому ардуины используют эту технологию, чтобы их пользователям жизнь упростить. (Собственно поэтому у меня валяется ардуина 2560-я всегда под рукой, на которой я обычно и отлаживаю разные новые для себя железки или код.)
0
Не знаю почему, но мне ардуино не нравится :) Может быть из-за того что там все готовое, чтоль… Да и сама сред разработки ардуиновская… брр :) Хотя, для людей, которые только начали изучать МК и не знают с чего начать, это хороший вариант, и запускается без танцев с бубном. И статей в нете полно, где все расписано до уровня домохозяйки :) И мое ИМХО: останавливаться на ардуино не стоит, нужно изучать все более сложные МК и специализированные среды разработки.
0
Это опять какие смотря цели вы ставите. Ведь для кого-то ардуино, и все, что с ней связано — лишь возможность собрать штуку, которую раньше собрать человек не мог. При этом ему возможно вообще не нравится программировать, и он не хочет в эту степь особо ударяться. (Себя я туда не отношу.)
Для таких людей ардуино тоже вполне себе годна и подходящща, и никуда дальше в сложные МК им не надо.
Короче, вариантов много, на самом деле.
Все люди разные, задачи и цели у всех тоже разные, оттуда и требования разные, и инструменты.
Для кого-то машина — лишь средство передвижения, а для кого-то драйв, кайф и т.п. Кто-то совсем не хочет влезать в устройство авто: ездит — и хорошо, сломалось — в сервис. А кому-то: хлебом не корми — дай в движке покопаться. Так ведь? :)
+1
Так :)
0
PS: а чем заинтересовало юзание 16 меги вместо 168? Только что может е епроще достать… Но спорный момент, ибо на том же чип-нн 168 стоит 70 р/штука.
Просто я это дело (ардуино на мега16) победил: вот Но там танцев с бубном не мало получается. В итоге смысл быстрой разработки под ардуино теряется. Так что проще не влезать в эту тему, а закупить себе 168/328 мег под ардуино, если конечно оно вообще надо.
0
Мега 16 стоит в Пинборде, хотел сперва юзать ее, но так и не вышло сделать конфиг файл для среди. В меги 16 больше портов ввода\вывода.
0
Ну я говорю, конфиг-файлом ты не обойдешься :) По железу они не до конца совместимы, поэтому там надо править практически все библиотеки так или иначе, которые в комплекте идут с ардуино. Да, есть готовые правленные добрыми людьми, я такими и пользовался, но, как оказалось, и они правлены лишь частично. В итоге что вышло у меня? Скомпилировалось, залилось — но не заработало :) Пришлось лезть в библиотеки и править код инициализации таймеров и прочей периферии. Повторюсь: все это можно сделать, да, но зачем? Ведь смысл быстрой разработки теряется. Проще тогда свою библиотеку под 16 мегу написать…
А если надо больше ног, так ардуино на 1280 и 2560 тоже работает :)
Зачем вам эта лишняя пара ног?
0
Порты лишними не бывают, пригодятся полюбому.
А можна ещо узнать как правильно подключить те файлы из вашей статьи для меги16 в среду ардуино?
0
Еще раз повторюсь, там просто не подключить, все равно толком ничего кроме мигания диодом не заработает :) Там придется все равно править ручками библиотеки.

Вот, я это помнится тут писал уже кое-кому :) Вам скопирую как есть, лень второй раз переписывать:
Чтобы подружить Ардуино и обычную 16 мегу (да и почти любую другую), потребуется вот отсюда файло: www.avr-developers.com/corefiles/index.html
arduino-extras.zip
Собственно оно кидается в папку с распакованной ардуино, и она резко начинает понимать кучу разных МК :) Правда я для экспериментов отдельную папку с ардуиной создавал, и оригинал не портил.
В общем, скачал, распаковал. Еще нужно заставить ардуино-ИДЕ шить МК не через бутлоадер, а через обычный программатор.
Для этого редактируется файл \hardware\arduino\boards.txt в нем находим блок, относящийся к нашему контроллеру, например, Arduino-Atmega16 и втыкаем в него дополнительные параметры:
arduino_atmega16.upload.using=usbtinyisp
arduino_atmega16.upload.protocol=usbtiny
arduino_atmega16.upload.maximum_size=14336
arduino_atmega16.upload.speed=57600
это если программатор usbtinyisp, для других программаторов надо другое втыкать, про это подробно вот тут написано: arduino.cc/en/Hacking/Programmer можно заставить ИДЕ и все МК шить через программатор, но мне нужно было только некоторые.
Еще можно там значение поменять arduino_atmega16.build.f_cpu=16000000L — это кварц какой применяется…
Такс, что еще… Собственно в arduino-extras.zip, если память не изменяет, и бутлодеры есть для других МК.
После этого у меня АрдуиноИДЕ стала понимать Мегу16. Компилировать под нее и заливать в нее код.
Какие фузы? Я использовал такие: High: C9 Low: 3F но это без бутлодера.
Так, что там еще, а! Еще естественно там не все в коде библиотек под неродные МК заточено. Конкретно вот мне пришлось править у них там код относящийся к ШИМ, так как неверно прописано что-то было по таймерам, и их функция analogWrite у меня не корректно работала. Только вот сейчас не вспомню, что точно менял…

Жирным выделил самую главную мысль :)
+1
Лично для себя сделал выводы
, там все очень просто, не надо ничего настроевать, переживать об правильных байтах, как из стека доставать данные… А просто накатал две три строчки и ето уже произошло.
Но ето все балавство, на мой взгляд. Среда разработки не универсальна для всех камней.
0
Баловство или не баловство, но у меня «умный дом» (громко сказано, наверное) на ардуйне работает :) На 2560-й :) Умеет светом управлять кое-где, телевизором, колонками, компьютером, следит за температурой дома и на улице, передает данные на сервер, тот строит графики там, новости выводит на инфо-панель.
В общем, это все в итоге баловство :)
А еще на ардуино написана не одна версия полноценной пилотажной системы для мультироторных систем.
Ардуино — это инструмент. А вот как человек использует этот инструмент — от этого как раз зависит результат ;) Разве нет?
0
КРУТО! ))
У меня тоже квадрик имеется, ради него ето все и затеял.
0
PS: я никого ни к чему не хочу склонять :) На самом деле просто выразил точку зрения, ато подумают тут еще, что я на темную сторону становлюсь. Нет.

И да, мне скучно и хочется поболтать :)
0
Да ладно, никуда ты не становишься, ты уже там.
0
=) Может быть =)
0
Заключения: ...
Собственно для этого ардуина и создавалась. Продалжайте писать скетчи и не слушайте тех кто говорит что ардуина лажа.

p.s.: Рекомендовал бы не просто переходник tqfp-dip а именно дуиновскую распиновку и габариты. бо шильды обычно под те платы идут (правда цена у них зачастую очень кусается).
0
Я как бы не хочу использовать никакие шилды, а приспособить среду разработки для написания программ на что угодно и на любой контролер фирмы атмел или что там еще понимается под ардуиной.
Короче ищу себе костыль на задницу :))
0
Я много для чего дуину юзаю, но шильды их — действительно дорого обычно, если только свои по их схемам собирать. Чаще всего я либо на заводской (китайский клон) дуине 2560-й отлаживаю что-то, тестирую, пробую. Либо вообще на макетке на 8 меге — на нее тоже без костылей ардуиновский код работает.

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

В принципе ардуино без костылей держит меги 8, 168, 328, 1280, 2560 (может еще какие — не помню). А на них много чего можно сделать. Так что ума не приложу, почему у вас такая тяга «приспособить среду разработки… на любой контролер фирмы атмел». Но если душа просит и есть время/силы и желание — то почему бы и нет? :) Знаний при этом наберетесь полезных — это однозначно.
0
Автору статьи повезло как бы — ему ни одного комментария из серии «ардуино — лажа» не прилетело (если я ничего не пропустил) :) Что меня даже удивило немного :) Наше сообщество стало терпимее? :)
Ну это я так, шучу-шучу :)
+1
Выходные. хомячки спят.
+1
а я пока только на ардуине всё и делаю. протестировал на родном железе на соплях. если работает — развел плату, запаял и готово. куча готового кода библиотек доступно в сети. не оптимально, зато быстро и работает.
0
Ардуина как отладочная плата — хорошая вещь. Я вот себе слепил однослойную плату с интерфейсом RS-232 (Arduino Severino) на Атмега8А, к ноуту подключаю через USB-COM переходник. Оставшуюся часть нужной схемы на макетке делаю. Отладил девайс — развел печатку, изготовил… Загрузчик правда залил совместимый с АВРСтудио (512 байт флеша), прошивка обновляеться через AVRProg. Очень удобно работать.
0
Голос с Темной стороны (заунывно так) «Спеллчекером по статье пройдись!»
0
Что «бил», «било» и «набрыл» глаз режет? :)
0
Ага, еще как)
0
угу. а еще «ШЫ». да и не только это. за пару косяков написал-бы в личку, а тут надо будет здоровенную портянку ваять.

PS: отмазка «язык не родной» не принимается. ;)
0
Извините за орфографические ошибки, что-то меня хром подвел с проверкой орфографии, да еще и язык не родной, сейчас буду исправлять ))
0
Вот зря вы гоните на ардуино! От работы их маркетологов движение электронщиков будет только шириться!
Я, например, никогда и не слышал про микроконтроллеры, но натолкнулся на статью об ардуино — заинтересовался, купил китайский клон Леонардо, ибо оригинал стоил раза в 3 дороже, и смысла его покупать не увидел. Сваял небольшую схему на макетке — благо дело простоте… и зацепило!
Решил сделать «умный моллюскарий» для улитки: 3 кнопки, дисплей 16*2, менюшка, программируется время вкл/выкл света, продолжительность вкл/выкл (аля рассвет/закат), поддержание температуры, влажности (заодно и вапоризатор с автоматическим доливом воды, по датчикам уровня, зафигачил), естественно часы реального времени…
И на моё неслыханное счастье — РАБОТАЕТ!
По ходу дела понял что ардуина это просто разводка МК на удобные пины + программатор. И задался целью перенести проект на печатную плату.
Освоил ЛУТ, пайку… и на смд 1206 сделал таки плату (немного не красиво вышли переходные отверстия, но учитывая что первый раз — считаю успешно, ибо урок усвоен).
Все шло гладко, пока не начал заливать бутлодырь со скерчем по ISP…
Бут просто не хочет заливаться через дуину…
Позже нашел много инфы, но это отдельные слезы — проблема в Леонардо.
Но до этого было много переделано, в том числе сгоряча запорота и распаяна плата — была версия что сгорел МК при пайке, но он оказался жив.

Чего вообще пишу...
Подключил МК (m32u4) напрямую к USB. Flip'ом не могу залить лодырь (Caterina-Leonardo.hex) на камень — пишет «Address is out of range» хотя уже и ложил просто на диск C:
Хотел залить просто скетч — мимо лодыря… Залил Блинк, а светик мигает ровно в 16 раз медленее, чем нужно… Я так понимаю, надо разбираться с фузами, но как их менять через Flip???

Вижу 3 выхода:
— таки разобраться и залить родной ардуиновский бутлодырь (более нравится);
— копать, как через флип поменять фузы (ведь на некоторых проектах это реализовано: AVRISP mkII);
— Сделать вышеприведенный программатор (не охота, ибо глупо будет прошивать МК с реализованным аппаратным USB таким же МК).

Помогите, а? Какой путь проще?
0
Флип фьюзы менять не умеет. А современные AVR умеют программно предделитель менять, а USB даже программно переключаться с внутреннего RC на внешний кварц.
0
По ходу дела понял что ардуина это просто разводка МК на удобные пины + программатор.
Не только. Наиболее существенные части Arduino — это упрощающий программирование фреймворк (несколько адаптированный Wiring) обеспечивающий, преимущественно, HAL-слой и принцип «шилдов» — геометрия платы и расположение хедеров стандартизованы и это позволяет делать стандартизованные платы расширения.
Критикуется преимущественно хардкорщиками за фреймворк (в духе «фууу, это как бейсик, настоящий эмбеддер кодит только на асме») и все те же шилды («фууу, даже плату спаять не может», «эти ваши шилды невменяемо дорогие», etc).
Подключил МК (m32u4) напрямую к USB. Flip'ом не могу залить лодырь (Caterina-Leonardo.hex) на камень — пишет «Address is out of range» хотя уже и ложил просто на диск C:
Судя по тому, что показывает Flip (у меня нет M32U4, так что проверить не могу) — он может залить в M32U4 только 28кб. Видимо, шьет через зашитый в верхние 4кб бутлоадер. А поскольку как раз его ты и хочешь переписать — ничего не получается. Если так — надо брать нормальный ISP программатор. Например, все тот же AVRISP mkII собрать, благо его можно прошить через встроенный бут.
0
Отказаться от полноценной отладки в AVR Studio или IAR, и использовать среду без отладки, изучать фреймворк которий кроме Arduino нигде больше не пригодиться… я Вас не монимаю…
0
  • avatar
  • Nemo
  • 18 апреля 2013, 09:49
изучать фреймворк которий кроме Arduino нигде больше не пригодиться…
Что может помешать использованию его в других проектах? В том числе тех, которые пишутся в IAR или AVR Studio? К тому же «полноценная отладка» под AVR-ки отнюдь не так доступна как, скажем, под кортексы.
+2
К тому же «полноценная отладка» под AVR-ки отнюдь не так доступна как, скажем, под кортексы.
Почему? AVR Studio, IAR поддерживает отладку по JTAG в реальном железе, чем не устраивает?

Что может помешать использованию его в других проектах? В том числе тех, которые пишутся в IAR или AVR Studio?
1. серьезные проекты без дебаг написать не получиться.
2. Насколько я знаю, фреймворк заточен только под AVR.
3. Вы видели комерчиские проекты где используеться Arduino и фреймворк? я нет (два года работаю в embedded, использовал разние МК)

Я думаю Arduino отличная платформа только чтобы поиграться, не больше.
0
Я думаю, имелось в виду, что многие новые контроллеры авровские поддерживают отладку только по debugWire, которая в самопальных отладчиках не реализована. А стоимость отладчиков от атмела весьма и весьма высока для любителя (да и вообще).

Так ардуино и создан для попробовать и войти в мир МК. Я его тоже е люблю, в общем-то, за стоимость и фреймворк, но, может, новичкам так проще. Надо будет что-то сложнее — перейдут на другие контроллеры/среду разработки и т.д. Было бы желание.
+2
Я имею в виду, что ардуино так и останеться для начинаючих. Такое мое личное мнение. Я не имею ничего против ардуино, но когда я читаю коментар например что использують програмний PWM (вместо апаратного на таймере) а потом жалуються что частота PWM низкая)))- очень смешно!) Я просто не понимаю людей которые писали на чистом С под разние МК, а тут себя ограничили рамками фреймворка ардуино.
0
Я имею в виду, что ардуино так и останеться для начинаючих.
Повторю вопрос: каке часть ардуино?
просто не понимаю людей которые писали на чистом С под разние МК, а тут себя ограничили рамками фреймворка ардуино.
Я подозреваю, что вы путаете фреймворк и вайринг.
0
Я имею в виду, что ардуино так и останеться для начинаючих. Такое мое личное мнение.
Ардуйня — для вечно начинающих, которые ничего больше тупых синхронных алгоритмов и ограниченного набора экранчиков-потенциометров-пищалок-серв понять неспособны.
0
Ардуйня — для вечно начинающих, которые ничего больше тупых синхронных алгоритмов и ограниченного набора экранчиков-потенциометров-пищалок-серв понять неспособны.
Осталось понять, почему вы ею не пользуетесь, раз она для таких как вы.
0
Почему? AVR Studio, IAR поддерживает отладку по JTAG в реальном железе, чем не устраивает?
Потому что железка стоит денег куда как бОльших.
1. серьезные проекты без дебаг написать не получиться.
Ардуиновский фреймворк этому никак не мешает. Если только вы не путаете IDE с фреймворком.
2. Насколько я знаю, фреймворк заточен только под AVR.
И что?
3. Вы видели комерчиские проекты где используеться Arduino и фреймворк? я нет (два года работаю в embedded, использовал разние МК)
Тут народ как-то описывал проекты сделанные на ардуине (включая железо), вполне себе коммерческие.
Я думаю Arduino отличная платформа только чтобы поиграться, не больше.
Вам стоит разделить IDE, фреймворк и железки. Железки такие же девборды как и любые другие. Фреймворк тоже (есть свои плюсы и минусы, но в «среднем по больнице» он вполне юзабелен). IDE — да, полный отстой (во всяком случае для тех, кто софт пишет профессионально). Но совершенно ничего не мешает использовать вместо родной IDE тот же еклипс.
0
Почему? AVR Studio, IAR поддерживает отладку по JTAG в реальном железе, чем не устраивает?
Потому что железка стоит денег куда как бОльших.
под кортекси отладка тоже стоит денег, и так же доступна как для AVR :)
0
под кортекси отладка тоже стоит денег, и так же доступна как для AVR :)
Ничего не мешает собрать версалун или жлинк/юлинк самостоятельно. С авр-ками этот номер проходит далеко не для всех чипов. А о доступности это вы вообще не правду говорите. Дискавери валяются чуть ли не в каждом магазине и стоят копейки. Да и покупной ж-линк на е-bay стоит, вобщем, вполне доступных денег. Ситуация с авр-ками куда как печальнее.
0
AVR можно купить в каждом радиоэлектронном магазине, или на радиоринке. Программатор очень простой, можно или спаять или купить например на ebay.com (как и любые отладочные инструменты (не важко клоны или оригиналы))
0
Кажется, разговор шел об отладке, а не программировании. Программируется и ардуино без проблем, причем даже программатор не нужен.
+1
AVR можно купить в каждом радиоэлектронном магазине, или на радиоринке. Программатор очень простой, можно или спаять или купить например на ebay.com (как и любые отладочные инструменты (не важко клоны или оригиналы))
STM-ки и дискавери лежат в тех же магазинах на соседней полке. К тому же дешевле (или за сравнимые деньги гораздо более мощный контроллер). А для прошивки даже программатор не нужен, подойдет любой адаптер COM с TTL выходами. Это из доступного. А так еще и CAN/USB поддерживаются. Да, в отличие от AVR-ок эта функциональность не занимает места в основной памяти и снести ее не получится.
+1
Смотря какая. ST-LINK, Versaloon или CoLinkEx — 100р за камень (STM32F103 или LPC1343 соответственно), еще 10-20р за остальные компоненты (буферы/согласователи/пассивная мелочевка) плюс сборка. AVR ICE 3 стоит столько же, но в баксах, б/у и со скидкой 50%, если не больше.
Готовые тоже вполне доступны — китайцы предлагают CoLinkEx за 30 баксов, а клоны J-link'а за 20. Оригинальный ST-LINK тоже стоит в районе 30-50 баксов, а дискавери — где-то от 8 до 20 баксов.
+1
Почему? AVR Studio, IAR поддерживает отладку по JTAG в реальном железе, чем не устраивает?
Среды поддерживают, а камни — нет (в большинстве популярных AVR отладка или отсутствует, или по debugWire, отладчик на который дорог). Да и даже там, где она есть — работает раздражающе медленно (я пробовал на ATMEGA16 плюс клон JTAG ICE).
Кроме того, никто не мешает отказаться от среды Arduino (она только для новичков, поэтому там в принципе не то что дебага — менеджера проекта нет) и работать с фреймворком в той же студии.
2. Насколько я знаю, фреймворк заточен только под AVR.
Изначально — быть может, сейчас его растащили на MSP430, различные кортексы (STM32, Nuvoton, AT91, etc) и PIC32.
3. Вы видели комерчиские проекты где используеться Arduino и фреймворк? я нет (два года работаю в embedded, использовал разние МК)
А как ты вообще предлагаешь определить, что используется в коммерческом проекте? Прошивку тебе не то что в сорцах — из камня слить никто не даст, так что определить, что там используется лично я, например, затруднюсь.
Если ты о самой плате с шилдами — в масс-продакшн оно не пойдет стопудово, а единичный экземпляр шанс встретить крайне мал.
Плюс оно нередко используется именно чтобы отказаться от коммерческого проекта, а накропать пусть на более дорогом железе, зато своими силами.
+1
Тут же в сообществе кто-то нул, что видел ардуину в промышленном устройстве.
0
Я думаю Arduino отличная платформа только чтобы поиграться, не больше.
Все — относительно. Иные игрушки — посложнее некоторых профессиональных вещей…

Посмотрите программы для современных контроллеров мультикоптеров.
Которые работают с акселерометрами, гироскопами, компасами, GPS, имеют систему динамической стабилизации для от 3х до 8 двигателей с ШИМ и ПИД — регулированием, систему навигации и автопилот, способный пройти заданный маршрут, или привести мультикоптер к точке старта с погрешностью, опрелеляемой лишь точностью GPS…

И написаны эти программы (по крайней мере, те, что я просматривал), — в среле Ардуино!

А вы сможете (достаточно быстро) написать подобную программу с нуля, на «правильном» C ??? И чтобы она летала на сотнях и тысячах аппаратов, которые если и разбиваются, то обычно лишь по причине ошибок моделиста, их пилотирующего, а не ошибок программиста, не там поставившего запятую…
+2
А вы сможете (достаточно быстро) написать подобную программу с нуля, на «правильном» C ??? И чтобы она летала на сотнях и тысячах аппаратов, которые если и разбиваются, то обычно лишь по причине ошибок моделиста, их пилотирующего, а не ошибок программиста, не там поставившего запятую…
не думаю что прошивку для квадракоптера писал один человек) Если быстро нужно писать вибираем PSoC 1 для простых или PSoC3, PSoC 5 для сложних проектов.
-2
Посмотрите программы для современных контроллеров мультикоптеров.
А ты сам сравнивал? Даже китайские игрушки (e.g. WL V929), снабжённые одним MEMS гироскопчиком ведут себя стабильнее и управляются лучше всей этой ардуйни! С профессиональными вещами сравнивать — вообще глупо.
0
С профессиональными вещами сравнивать
Вот, например, микрокоптер — профессиональный контроллер. Выбирается теми, кому нужно именно летать (не пилотаж на куке, не трепыхаться в воздухе на ардуйне), а лишь поднять камеру, например, и чтобы было максимально надёжно и удобно. Закрытый, стоит $500 базовая платка (лицензия на GPS автопилот стоит гораздо дороже), тем не менее толковые моделисты выбирают его и не спешат ставить ардуйню.
коптер в полном автономном режиме — а вот вроде как любительская разработка, микрокоптер на её фоне смотрится жалко (можно посмотреть видео).
Ну и настоящие профессиональные вещи — GRASP quadrotor, PD-100 Black Hornet — по-настоящему круто, вот что такое профессиональные вещи.
0
Естественно, ни с одной из этих вещей ардуйня и близко не лежала…
0
Естественно, ни с одной из этих вещей ардуйня и близко не лежала…
Что вовсе не удивительно, если учесть, что ардуйня до последнего времени делалась на ваших любимых межках, а они банально не в состоянии решать такие задачи. И способность делать прецизионный ногодрыг им в этих задачах никак не помоает.
0
Межка имеет много достоинств. То, что некоторым быдлокодерам стрёмно писать под восьмибитник, подавай им 32 бит как на большом компе вовсе их не умаляет. Пусть себе валят.
Тем временем, микрокоптер на m1284, и платка весьма достойная.
0
Межка имеет много достоинств.
Которых, при попытке их разглядеть, обнаружить не удается.
То, что некоторым быдлокодерам стрёмно писать
Ну так не пишите, кто ж вас заставляет-то?
0
Которых, при попытке их разглядеть, обнаружить не удается.
Если тебе не удаётся — это не значит, что их нет.
+1
Если тебе не удаётся — это не значит, что их нет.
Если вам кажется, что они есть и много, то это не значит, что они реально существуют.
+1
Если вам кажется, что они есть и много, то это не значит, что они реально существуют.
Мне не кажется, я их знаю и использую.
+1
Мне не кажется, я их знаю и использую.
Вы их придумываете и себя уговариваете.
-1
Вы их придумываете и себя уговариваете.
Нет, вы. Понавыдумывали всяких яв, оопов и прочего говна (что всё глючит, тормозит и занимает гигабайты) и теперь придумываете и себя уговариваете.
0
Понавыдумывали всяких яв, оопов и прочего
Это все, как минимум, существует в действительности. А ваши выдумки реальны только для вас, начиная от глюков и тормозов, до «многих преимуществ» авр-ок.
0
Странная у вас логика: «Мне не нравиться как летает MultiWii а виновата в этом естественно arduino». Позвольте узнать, а что именно «мешает» летать коптеру? Встроенный бутлоадер или Wiring?

На «качество» платы управления в первую очередь влияют применяемые алгоритмы и применяемые датчики. MultiWii — это бюджетная плата, она не может похвастаться ни алгоритмами ни датчиками. Да и какой смысл сравнивать MultiWii за 50 баксов с «профессиональной» платой за 500 баксов?
+2
MultiWii — это бюджетная плата, она не может похвастаться ни алгоритмами ни датчиками. Да и какой смысл сравнивать MultiWii за 50 баксов с «профессиональной» платой за 500 баксов?
В MultiWii обычно используется Мега 328, и только в самых навороченных (баксов за 110) — Мега 256. И тем не менее — они справляются с большой кучей датчиков, и гибко настраиваются на любую конфигурацию программой на компе (от 3х до 8 винтов, с разными вариантами направления вращения, и есть даже вариант для установке на самолете). Можно даже с компа менять всякие настроечные коэффициенты управления, приспосабливая под себя — делая модель более стабильной, но «вялой», или менее стабильной, но шустрой. Кому как нравится.

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

А то тут многие даже на STM32 и «расово правильном» С, дальше мигания светодиодом или запуска готовых примеров, так и не продвинулись…

Зато болтовни — выше крыши.
Чуть что — поднимают вой: PICи — говно, AVR — ацтой, 8 битники — померли, — бегом все на ARM!

Если бы меньше болтали, а больше делали, на чем угодно, хоть на Бэйсике, — цены бы им не было… А так — треп один. Якобы они чего — то там делают, да вот только показать нельзя, государственная тайна…
0
Ну, я с Вами и не спорю, я наоборот разделаю Вашу позицию.

Я хотел сказать, что MultiWii это бюджетное решение, и как за свои деньги оно летает неплохо. И некорректно его сравнивать с платами, где одни только датчики стоят в несколько раз дороже чем типичная плата на MultiWii.

А то тут многие даже на STM32 и «расово правильном» С, дальше мигания светодиодом или запуска готовых примеров, так и не продвинулись…
Зато болтовни — выше крыши.

Я вот здесь не согласен, нельзя быть столь категоричным. Выще приводили ссылку на «коптер в полном автономном режиме». Проэкт работает на STM32F4 т. к. реализованы сложные алгоритмы (фильтр Калмана, адаптивные ПИД и т. д.) и вся эта штука активно использует операции с плавающей точкой. Но результаты действительно впечатляют.

Даже если уйти от плавающей точки — у «атМеги» банально не хватит ресурсов на реализацию подобных алгоритмов.
0
Проэкт работает на STM32F4 т. к. реализованы сложные алгоритмы (фильтр Калмана, адаптивные ПИД и т. д.)
А там есть инфа по алгоритмам и железу? А то я ничего кроме видюшек не нашел и потерял интерес.
0
А там есть инфа по алгоритмам и железу?

Нет, автор все держит в секрете. Там есть только видео и тролинг весьма обобщенные высказывания от автора.
+1
Вот поэтому такие темы я в отличие от Lifelover'а даже не рассматриваю. Позабавился только моментом, где автор говорил «вы бы еще с КК сравнили», прокомментировав от себя «не, до КК тебе еще далеко — он открытый».
+2
Если бы меньше болтали, а больше делали, на чем угодно, хоть на Бэйсике, — цены бы им не было… А так — треп один. Якобы они чего — то там делают, да вот только показать нельзя, государственная тайна…
Судя по вашему блогу, процитированное это был приступ самокритики с вашей стороны :)
-1
Он на форуме отписывается, а не в блоге. Так что к SWG претензий нет.
+2
Охотно верю. Но это вовсе не повод вести разговор в стиле «если б меньше болтали».
0
Позвольте узнать, а что именно «мешает» летать коптеру? Встроенный бутлоадер или Wiring?
Теоретически — ничего. Де-факто же, ардуйня — выбор лентяя и быдла. Глупо ожидать от них чего-то хорошего.

Вот, догадайся где ардуйня, а где микрокоптер.
-2
А зачем Вы приводите скриншоты разных программ для конфигурации коптера. Эти программы работают на PC, ни к микроконтроллерам ни к алгоритмам управления они отношения не имеют.

Что Вам не нравится — дизайн интерфейса? Но какой это имеет отношение к arduino?
+2
Но какой это имеет отношение к arduino?
Имеет отношение к тем, кто их сделал. Просто сравнить подход к делу.
-1
Вы почему-то любите в спорах на сугубо «инженерную» тематику приводить скриншоты и сетовать на «обилие глянца в дизайне». Только к чему все это, у нас здесь, вроде, не форум для дизайнеров.

Для MultiWii есть много альтернативных программ конфигурации. Выбирайте на свой вкус. На сколько мне известно, Вы используете mw-wingui.

Какое отношение дизайн программы для РС имеет к arduino и Wiring? Такое чувство, что вы оцениваете любой продукт и технологию исключительно по дизайну упаковки.
+2
Причём здесь глянец? Софтина от мультиви — явная халтура.
-2
Мне тоже не нравится штатная софтина. Только какое отношение это имеет к вопросу?

Вы постоянно уходите от прямых вопросов. Повторю изначальный вопрос

Позвольте узнать, а что именно «мешает» летать коптеру? Встроенный бутлоадер или Wiring?

вместо ответа на который Вы приводите скиншоты. Вы бы еще фотографию няшного котика привели в качестве аргумента.
+3
Позвольте узнать, а что именно «мешает» летать коптеру? Встроенный бутлоадер или Wiring?
Ну а что мешает ардуинщикам сделать нормальную софтину? Или написать нормальную документацию?
Но ведь не сделали! (причём, зная что такое ардуйня, это предсказуемо).
Я тебе показал скриншоты, чтобы ты сравнил подход к делу у тех, кто говноляпствует на всякой ардуйне и у тех, кто делает нормальные вещи. Попробуй это понять, и тогда станет ясно что мешает нормально сделать на ардуйне.
-2
Ну а что мешает ардуинщикам сделать нормальную софтину?

А почему Вы решили, что программу для конфигурации и прошивку писали одни и те-же люди. И какое отношение данная софтина имеет к arduino?

Или написать нормальную документацию?

Опять-же, как качество документауии к MultiWii влияет на arduino и Wiring?

Вы, всеже, можете ответить на конкретный вопрос

Позвольте узнать, а что именно «мешает» летать коптеру? Встроенный бутлоадер или Wiring?

и не уводить дискуссию в сторону.
+2
Ну а что мешает ардуинщикам сделать нормальную софтину? Или написать нормальную документацию?
А что мешает сделать это вам?
подход к делу у тех, кто говноляпствует на всякой ардуйне и у тех, кто делает нормальные вещи.
Ваше представление о «нормальных вещах» базируется на вашем субъективном и довольно извращенном (в силу недостаточности знаний о предмете) представлении о том, что такое нормально. Я уж не говорю о том, что вы сами никогда не утруждали себя попытками «попытаться понять». Так что подобная рекомендация в вашем исполнении утрачивает свой смысл.
+1
Да Вы что, evsi, с ума совсем выжили? Нормальный софт под ПК может быть написан только на Perl'е! А Perl самодокументируемый и самый понятный язык в мире! :D
+3
:)
0
Ваше представление о «нормальных вещах»
Весь ваш «современный софт» напоминает картинку из статьи «Тёплый ламповый звук».

Когда вам говоришь, что так быть не должно, заводите свои излюбленные «где объективные критерии», «ваши знания недостаточны» (ага, куда нам, даже не можем провод в правильном направлении припаять).
И всё это говно вы старательно тащите в электронику (под визги о прогрессе и развитии).
-1
Весь ваш «современный софт»
Специально для тех, до кого с первого раза не доходит, повторяю: моего софта вы не видели. А тот софт, который вы видели и ругаете, это, чаще всего, продукты созданные теми методами, которые вы предлагаете.
напоминает картинку из статьи «Тёплый ламповый звук».
Ее напоминает «правильный» по вашим представлениям софт. Собственно, внутри он, чаще всего, так и выглядит.
И всё это говно вы старательно тащите в электронику
Я в электронику ничего не тащу, как минимум потому, что она для меня хобби. А вот вы говно тащите, под визги о «правильности».
+2
Когда вам говоришь, что так быть не должно, заводите свои излюбленные «где объективные критерии», «ваши знания недостаточны» (ага, куда нам, даже не можем провод в правильном направлении припаять).

Lifelover, Вы — замечательный собеседник. С Вами так интересно вести дискуссию. Немного, правда, смущает, что Вы практически в каждом своем комментарии меняете тему разговора и уходите от неудобных для Вас вопросов. Но Ваши аргументы выглядят очень убедительно — ведь Вы их подкрепляете вырванными из контекста цитатами и не относящимися к делу кринками.

Ели резюмировать все Ваши посты, то все можно свести к одной фразе: «есть два мнения — одно мое, второе неправильное». И те, кто имеют мнение отличное от Вашего — естественно «быдло».

З.Ы.

В качеств доказательства своих слов, приведу гениальную цитату из Fallout2:

“- Маргаритки… Маргаритки… *свистит* *поет* ”

Ели даже это Вас не убедит, то думаю эта картинка окончательно расставит все по местам:



:)
+5
Халтуру делают те кто пишут код и те кто потом его выпускают в релиз. А есть и альтернативные прошивки реализованы на исходниках мультивия. Вот тут чел красиво допилил мультивий и продает свои допилки. И все летает и все довольны и у чела куча покупателей и ненависников, ну как же без них. И я тоже с радостю летаю на виее.
+1
Почему сразу для «лентяя и быдла»?? Не все же рождаются програмистами на асме. Некоторым нужно ввобще ссобразить минимальный проек из какой нибуть овтоматикой. Например скульптору, или дизайнеру шмоток… Людям которие од електроники далеко, а до програмирования еще дальше. Не думаю что какая то там платка из бутлоадером стоит катого срача.
+4
Отказаться от полноценной отладки в AVR Studio или IAR, и использовать среду без отладки,
… я Вас не понимаю…
Пока еще вам этого не понять.
Научитесь писать правильные программы, — и забудете отладку их, как страшный сон…

Я не раз уже писал, что некоторые придают слишком большое значение отладке и средствам для нее (софтовым и аппаратным, типа JTAG всяких).
Создается впечатление, что они только для того и занимаются микроконтроллерами, лишь бы поотлаживать…

На самам же деле — правильно написанная программа, в отладке не нуждается.
Отладка, в частности, внутрисхемная, и на всяких симуляторах — это всего лишь средство привести в более — менее рабочее состояние херово и с ошибками написанную программу.

Для нормальной программы — отладка сводится лишь к проверке ее функционирования, в соответствии с задуманным, поведения ее в различных ситуациях. Это — уже не отладка, а тестирование. И делается уже на готовом изделии, в реальном времени, в реальной рабочей обстановке.

Есть прямая зависимость. Чем проще писать программы, чем удобнее и дружественнее среда разработки, — тем меньше ошибок, тем проще отладка программы.

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

Думаю, раз уж на Ардуино пишут люди, которые далеко не прфессионалы, и без проблем их программы работают (в отличие от «истинных программистов», которые признают только С), — то и отладка для них (в том виде, как сейчас обычно принято считать — именно ковыряние в коде и регистрах всякими JTAGами — нафиг не нужна.

Чего там ковырять, если и так все работает…

А на чем писать — на Ардуино, Бэйсике, Паскале, или горячо любимом некоторыми С, — для самого контроллера пофигу.
Он понимает только прошитый в него машинный код. И работает так, как этот код ему указывает, и никак иначе.

И судить о программисте, написавшем программу, будут не по тому, какие диалекты С он знает и как обьекты в программе использует, как выглядит и сколько байт занимает его код.
— Судить об умении программиста будут по тому, как работает его программа, насколько надежно обрабатывает нештатные ситуации, случаются ли с ней сбои и зависания. А не по величине его надутых щек, и глубокомысленным высказываниям, надерганным из Интернета…
+1
На самам же деле — правильно написанная программа, в отладке не нуждается.
Отладка, в частности, внутрисхемная, и на всяких симуляторах — это всего лишь средство привести в более — менее рабочее состояние херово и с ошибками написанную программу.
Блажен, кто верует, что можно писать программы вообще без ошибок, правильно и с первого раза.

P.S. пить (почти) без ошибок можно только простые программы. и да, в этом случае отладчик опционален, как можно видеть на примере ардуины.
+1
пить (почти)
«писать», естественно.
0
Блажен, кто верует, что можно писать программы вообще без ошибок, правильно и с первого раза.
Ну, не нало впадать в крайности. Я никогда ничего не абсолютизирую.

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

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

пить (почти)
«писать», естественно.
Как и какать. Куда ж без этого…

Плохо, что тут нет редактирования, как на форуме. Часто при быстром слепом наборе пальцы не на те клавиши попадают. Обычно замечается уже после отправки сообщения…
0
большинство ошибок видны и вполне локализуются и без специальных отладочных средств.
При этом, чаще всего, с отладчиком это происходит гораздо быстрее и меньшими затратами нервных клеток, чем с пальцем, ползающим по распечатке. :)
+1
При «правильном» программировании сложная задача разбивается на более мелкие, с минимизацией количества связей, а простые части гораздо проще анализируются и без отладчика. Если До написания кода удалось продумать задачу, то реализуется она действительно с первого раза и правильно (предполагается, что архетиктура профессионалу известна), а ошибки связаны за частую только с опечатками.
Другое дело когда берётся чужей проект без соответствующей документации. Тут обычно ставка делается только на отладку, по скольку не известны все взаимосвязи и поведение системы.
Так что «профессионал», пишущий свою программу под отладчиком, не может считаться профессионалом.

P.S.: Достаточно давно уже SWG «не воспринимаю всерьез» (чсв его что ли не нравится), но корневой комментарий полностью поддерживаю (говорят его опыт и знание дела).
P.P.S.: Себя к профессионалам, как вы поняли, я отнести не могу, поскольку полагаюсь в последнее время только на компилятор и отладчик.
+2
При «правильном» программировании сложная задача разбивается на более мелкие, с минимизацией количества связей, а простые части гораздо проще анализируются и без отладчика. Если До написания кода удалось продумать задачу, то реализуется она действительно с первого раза и правильно (предполагается, что архетиктура профессионалу известна), а ошибки связаны за частую только с опечатками.
Все верно, но есть целый класс ошибок связанных с а) ошибочными предположениями о поведении системы и б) взаимодествием компонентов во времени (специфично для многопоточных прогремм). Ошибок (а) не всегда можно избежать в силу того, что они, зачастую, являются последствием неточной, неполной, неправильной или неправильно понятой информации из внешних источников (тех же даташитов). Этот вид ошибок проще всего ловить именно в отладчике, хотя зачастую можно обойтись логами (но в случае встраиваемых систем с логами часто напряжно). Ошибок (б) часто можно избежать еще на этапе проектирования, но это требует определенного опыта и знаний о тонких деталях поведения системы (которые, вообще говоря, далеко не всегда известны или документированы). Эти ошибки вообще сложно ловить, логи тут помогают слабо, поскольку влияют на поведение системы сами по себе. Отладчик с помощью брекпоинтов позволяет воспроизвести проблему без заметного влияния на систему и в момент останова посмотреть ее состояние (хотя останов зачастую нарушает работу системы в целом). Но, все же, это хоть какой-то инструмент и это однозначно лучше, чем отсутствие инструментов вообще.

Так что «профессионал», пишущий свою программу под отладчиком, не может считаться профессионалом.
«Писать под отладчиком» и «пользоваться отладчиком когда это нужно» — две разные вещи.

P.S. меня зацепила ультимативность высказанного мнения. чудес не бывает — ошибки были, есть и еще не скоро их удастся полностью избежать. не использовать инструмент из идеологических соображений «принцессы не какают» «настоящие процессионалы не используют отладчик» — глупость и признак отсутствия того самого профессионализма.
+2
На мой взгляд ни SWG ни я не высказывались в ультимативной форме о том что отладчик не нужен профессионалу. Ваши примеры как раз отмечают данные ситуации. SWG написал суть, я подправил Ваше высказывание в части более сложных систем — их тоже можно писать (почти) без ошибок без отладчика. Отладчик опционален (при работе с чужим кодом — эта опция, за частую, становится необходимостью, в основном потому, что код писался под отладчиком).
«Писать под отладчиком» и «пользоваться отладчиком когда это нужно» — две разные вещи.
Это и есть ключивой момент высказывания. Абсолютное большенство окружающих меня сейчас «профессионалов» именно «пишет под отладчиком», при чём даже простые програмки.

А вот корень ветки заявляет, что «жить не может без отладчика» (не цитата) :)
+2
На мой взгляд ни SWG ни я не высказывались в ультимативной форме о том что отладчик не нужен профессионалу.
Скажем так: проглядывается негативное отношение в отношении тех, кто ими пользуется (а местами даже в отношении тех, кто высказывается за наличие отладчика вообще).
А вот корень ветки заявляет, что «жить не может без отладчика» (не цитата) :)
Именно, что не цитата. Там тоже нет абсолютизации (необходимости отладчика). И, по большому счету, «корень ветки» можно интерпретировать и так: если сравнивать среды разработки, то среда разработки с отладчиком предпочтительнее таковой без отладчика.

P.S. отладчик всего лишь инструмент, один из многих. превращать его наличие или использование в критерий для оценки уровня профессионализма, как по мне, глупость.
+2
P.S. отладчик всего лишь инструмент, один из многих. превращать его наличие или использование в критерий для оценки уровня профессионализма, как по мне, глупость.
Как и такая же глупость — обожествлять отладчик, как будто без него и прожить нельзя, и программу написать невозможно… С чего, собственно, вся эта ветка про отладку и началась.

Типа, как можно писать в среде Ардуино, если в ней нет встроенного отладчика…

Тем не менее, программы в ней пишут, и они — даже работают… Странно, да? Без отладчика-то…
+1
Как и такая же глупость — обожествлять отладчик
Точно. Вот только пока о его обожествлении никто, кроме вас, не писал.
Типа, как можно писать в среде Ардуино, если в ней нет встроенного отладчика…
Думаю, внимательное перечитывание того поста вам поможет. Там шла речь об отказаться от полноценной отладки в авр студио и иар. То есть предполагается, что эти инструменты уже есть. Правда, имея такие инструменты и умея ими пользоваться, переходить на ардуиновскую иде, подозреваю, будет просто неудобно, безотносительно наличия отладки.
+1
Я вполне откажусь от ИАР, если будет среда полегче, подобная ардуине, для STM8. Основные «особенности» ощупаны и надо переходить на качественную или быструю разработку. Качественная — предполагаю продумывание проекта до написания кода (а не писание в отладчике). Быстрая — проектики на 10-30 команд посмотреть как поведёт себя МК в той или иной ситуации (что бы не настраивать воркспейсы и прочее).
А на случай непредвиденных ситуаций, можно подумать и о возможности сборки в ИАР, что бы иметь полноценную отладку.
+1
Писать можно, вопрос лишь в затраченном времени в случае возникновения каких-либо непредвиденных проблем. Если кому-то времени своего не жалко — пусть отлаживает светодиодиком ли чем там принято, кто ж мешает.

Ошибки бывают очень коварные.
0
И, по большому счету, «корень ветки» можно интерпретировать и так: если сравнивать среды разработки, то среда разработки с отладчиком предпочтительнее таковой без отладчика.
А вот именно этот критерий можно и оспорить. Среда разработки должна быть удобной и позволять выполнить поставленную задачу.
Если среда не имеет отладчика, но имеет простой, быстрый и понятный интерфейс, то она будет предпочтительнее здоровенной, неповоротливой среды с кучей вложенных меню до 4-го уровня и прочими «предестями» добавленными для «мощи» среды.
Сколько вы реально «пунктов меню» (считай вынесенных возможностей) используете в своей среде? Сомниваюсь что за 5% уйдет. Сколько в среднем тратите времени на создание нового проекта: поменять настройки под камень, подключить библиотеки,...?
Сколько реально использует традиционный «быдло» в среде ардуино? Сколько ему реально нехватает возможностей? В простоте сила.
Так что только из-за одного лишь отладчика отдавать предпочтение…
+1
У меня своя специфика — я привык к удобной навигации и тому, что код разбит на небольшие исходники. Для меня это куда существеннее чем даже наличие отладчика. Но по этому критерию ардуиновская IDE для меня отпадает полностью. И да, я использую значительно больше 5%. Но, повторюсь, это моя специфика, которая сильно отличается от типичного пользователя ардуиновской IDE. Кстати, в самом ардуиновском сообществе далеко не всех устраивает среда, поэтому начали появляться альтернативы.
0
Да, это выглядит поудобнее, но не содержит множества избыточных кнопок и полей и тоже без отладчика :)
Я привык что все навигаторы на больших проектах глючат, и за частую приходится пользоваться поиском в командере, и зачастую же получается быстрее. Такая у меня специфика — много говнокода написанного в лайфлаверстайл.
А в своих «проектах» обычно знаю что где и поиск проходит быстро.
0
Я привык что все навигаторы на больших проектах глючат, и за частую приходится пользоваться поиском в командере, и зачастую же получается быстрее.
То, о чем я говорю, это не поиск, а именно навигация — переход к определениям и обратно, бредкрамб и тому подобное.
0
бредкрамб и тому подобное.
А что это?
0
История переходов, которую можно прокручивать вперед и назад.
0
Я про него же: Find/Open/Goto declaration/definition. Навигацией из дерева проектов/классов пользоваться вообще беспонту — не ясно где искать, всё написано где попало.
0
много говнокода написанного в лайфлаверстайл
Не надо, решать сложные задачи, разбив их на простые, и писать код он умеет очень хорошо, и код у него очень простой, ясный и хорошо прокомментированный. Я имею ввиду его TCP/IP стек. Там все ясно и понятно, и хотя код написан на C, читается очень быстро и все понятно, даже не гуру.
0
Не надо, решать сложные задачи, разбив их на простые, и писать код он умеет очень хорошо, и код у него очень простой, ясный и хорошо прокомментированный
Прикол в том, что простой и ясный код в комментариях не нуждается.
+1
Не надо, решать сложные задачи, разбив их на простые, и писать код он умеет очень хорошо, и код у него очень простой, ясный и хорошо прокомментированный. Я имею ввиду его TCP/IP стек.
Там задача, на самом деле, достаточно простая и слишком мало кода, что бы оценить навык решения сложных задач. Наличие функций-полотенец намекает, что все далеко не так радужно.
+1
Я, собственно, высказал свое мнение, как «пикейный жилет», т.е. не гуру или сторонник какой-то идеологии, но как некий заказчик/потребитель — «не_полный_идиот» и лох в MCU технологиях.
0
Я понимаю. Тем не менее. Есть простое правило: функция должна помещаться на екран. Если это не так, функцию надо делить на части.
0
Есть и посуровее правило — функция должна выполнять только одну задачу. С ним даже до экрана функции не дорастают обычно.
0
Есть и посуровее правило — функция должна выполнять только одну задачу. С ним даже до экрана функции не дорастают обычно.
Это правило для тех, кто пишет и/или понимает код. А для «читателей» сгодится и суррогат в виде того, что я написал.
0
Надо запомнить это правило, но не будучи заказчиком «тираном и сумасбродом» я бы все же расширил это правило до 2-х экранов, и даже до 3-х ;) Тем более, если код очень обильно комментирован, за что, я считаю, — надо доплачивать и наоборот: просто не оплачивать не комментированный код. Собственно, это моя личная, если хотите — шкурная, позиция.
0
Надо запомнить это правило, но не будучи заказчиком «тираном и сумасбродом» я бы все же расширил это правило до 2-х экранов, и даже до 3-х ;)
Если смотреть с точки зрения заказчика, то расширять рамки нельзя, более того, чревато боком. Поскольку более сложный код с большей вероятностью содержит ошибки, его сложнее и дороже сопровождать.
Тем более, если код очень обильно комментирован, за что, я считаю, — надо доплачивать и наоборот: просто не оплачивать не комментированный код.
Еще раз: если код нуждается в комментариях, то он написан плохо. Текст программы должен читаться как документация к коду.
0
если код нуждается в комментариях, то он написан плохо. Текст программы должен читаться как документация к коду.
чем это отличается от «лучше быть богатым и здоровым, чем бедным и больным»?
Моё ИМХО таково: это В ПРИНЦИПЕ невозможно с современными широкоупотребляемыми языками программирования. По сравнению с человечьими языками, ЯП — это как бе-ме племени Тумба-Юмба из 50 слов. И на этом бе-ме предлагается как бы «самодокументировать» код? Я вот пишу комментарии, ибо я помню с детства, что программы пишутся для людей, а людям (самой разной квалификации, что характерно) будет гораздо проще разбираться в коде, где есть полезные комментарии (т.е. описывающие сущности, скажем так, более высокого уровня, чем то, что и так понятно сразу из кода). И, в итоге, тратить на понимание того, что делается в некоей ф-ии 10 минут вместо нескольких часов «декомпиляции в голове».
0
Моё ИМХО таково: это В ПРИНЦИПЕ невозможно с современными широкоупотребляемыми языками программирования
Ваше HO опровергается практикой.
0
Тут я с чистой совестью напишу: «Моё ХО полностью подтверждается практикой». Не чтобы поспорить, а потому, что так и есть. Чуть ли не каждый день приходится ковыряться в чужом коде (зачастую он реально ГОВНО-код), но даже хорошо написанный код для осознания ЦЕЛЕЙ его написания вызывает некоторое напряжение мозга. И трату времени. И не факт, что осознание будет полностью верным, т.к. автор мог тупо накосячить в реализации. И что я пойму из такого кода? Верно: не то, что надо было понять.

Кстати, что нам говорят в своих книгах идеологи того самого «совершенного» и «чистого» кода? АФАИК фразочка про «плохой код» МакКоннеллу принадлежит? Но почему-то они к комментированию относятся весьма и весьма положительно. Прямо-таки рекомендуют.
0
И не факт, что осознание будет полностью верным, т.к. автор мог тупо накосячить в реализации.
Угу. И при этом написать правильный коментарий. И разницу между кодом и комментарием можно ловить очень долго.
И что я пойму из такого кода? Верно: не то, что надо было понять.
Не верно. Из кода (и только из него) можно понять то, как на самом деле работает программа. Не то, как она задумывалась, не то, что хотел написать автор. А именно в точности то, что, все-таки, написал.
Кстати, что нам говорят в своих книгах идеологи того самого «совершенного» и «чистого» кода?
Не знаю, я идеологов «совершенного» и «чистого» кода не читаю.
0

Таки мой глаз ремесленника и наукообразного инженера просто требует, что бы ему показали наконец этот самый «The CODE» для MCU, достойный Да Винчи и не документированный, но понятный.
0
Таки мой глаз ремесленника и наукообразного инженера просто требует, что бы ему показали наконец этот самый «The CODE» для MCU, достойный Да Винчи и не документированный, но понятный.
Для MCU не видел. Промышленного кода под них не пишу, а любительский или опенсорсный пока не попадался. Впрочем, я не так уж много его видел.
0
Не верно. Из кода (и только из него) можно понять то, как на самом деле работает программа. Не то, как она задумывалась, не то, что хотел написать автор. А именно в точности то, что, все-таки, написал.
Так обычно считают те, кто не понимает смысла и назначения комментариев.

Комментировать надо не действие, совершаемое командой в данной строке (например, пересылку из одного регистра в другой). А — соответствующее этой пересылке действие алгоритма, котрая она реализует.
Например — «задали контрольное значение такого-то параметра».

Одна такая строчка комментария способна заменить просмотр половины портянки листинга, чтобы понять, где же в нем это значение задается…

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

Отсутствме нормальных комментариев — один из главных признаков упоминаемого здесь многими «быдлокодинга». Через полгода — год автор и сам уже забудет, где и что делает его программа. Чего уж говорить о других, которые будут пытаться ее понять.

Из листинга видна лишь низовая работа контроллера, выполнение им команд.
Но — отнюдь не алгоритм решаемой им задачи.

Пока программист этого не понял — вряд ли можно считать его профессионалом. Независимо от количества освоенных им языков и камней.
Так и останется просто кодером, тупо генерирующим код.
+1
При написании по тем правилам, о которых evsi — сам код на 80% представляет собой комментарий, это имена функций, переменных и констант. При этом функции короткие и выполняют только одну задачу, указанную в названии. Аналогично и с прочими сущностями. При подобном подходе большую часть кода можно прокомментировать только в стиле «MOV EAX, 10; поместить 10 в EAX».
Не по ним пишется только код, который нельзя написать в таком стиле — скажем, из-за необходимости оптимизации. Вот такой код комментировать необходимо. Но его обычно не более 1%.
0
Еще раз: Пример такого кода покажите
0
Да пожалуйста (да, я издеваюсь).
Впрочем, обрати внимание — комментарии в высокие энтерпрайзные стандарты не ыходят.
0
Это что такое ты здесь запостил? Издеваешься над evsi и льешь воду на мельницу lifelover? :D
0
Это код по высоким энтерпрайзным стандартам (а заодно — ирония над ними же). При таких объемах задачи, конечно, он на 95% состоит из оверхеда, зато легко понимается, расширяется и поддерживается — и это без единого комментария.
И на мельницу Lifelover'а я лью не воду, а масло.
0
После такого можно прийти в себя, удержать себя в руках и сохранить уважение к java, только вспомнив, что существуют такие великие вещи, как Minecraft и Android.
0
А Java тут ни при чем. Примерно так пишут на любом языке (точнее, любом императивном) проекты соответствующего размера.
+2
Это, вобщем, не издевка. Скорее (несколько утрированный) пример того, как реально пишется код в ентерпрайзе. Другой вопрос, что в том же ентерпрайзе этот пример забанили бы как overengineered.
0
При написании по тем правилам, о которых evsi — сам код на 80% представляет собой комментарий, это имена функций, переменных и констант.
Короткие имена — не всегда отражают суть.
Длинные имена — тоже делают программу трудно читаемой.

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

При этом функции короткие и выполняют только одну задачу, указанную в названии. Аналогично и с прочими сущностями. При подобном подходе большую часть кода можно прокомментировать только в стиле «MOV EAX, 10; поместить 10 в EAX».
Излишне мельчить функции — тоже нехорошо.
Это тоже затрудняет понимание работы программы, разбитой на слишком мелкие кусочки. Все же, языки высокого уровня — это не ассемблер.

При этом, например, в AVR к нескольки машинным командам самой функции, компилятор добавит еще почти столько же стековых операций, которые займут заметную долю кода, что неизбежно снизит производительность и увеличит длину кода.
У PIC, например, сохранение регистров в стеке — не требуется, но короткий стек ограничивает уровень вложения подпрограмм (не более 7). Ведь надо еще учитывать и прерывания, оставляя как минимум 1 уроверь и на них.

В общем, надо не впадать в те или иные крайности, а подходить к написанию программ более обдуманно.
+1
Короткие имена — не всегда отражают суть.
Длинные имена — тоже делают программу трудно читаемой.
«There are only two hard things in Computer Science: cache invalidation and naming things.»
— Phil Karlton
Я обычно к заголовку процедуры или функции добавляю комментарий, поясняющий ее назначение.
Сам же заголовок стараюсь делать не очень длинным.
Если говорить лично о твоем коде — я его видел только один раз, но забил на чтение кода после первых же десяти строк и начал скакать по комментариям. И это не похвала.
При этом, например, в AVR к нескольки машинным командам самой функции, компилятор добавит еще почти столько же стековых операций, которые займут заметную долю кода, что неизбежно снизит производительность и увеличит длину кода.
Это технические проблемы. Для них есть технические решения — inline, например. Или более современный камень. Разумеется, при необходимости можно и в оптимизацию уйти, чтобы уложиться в заданные ограничения, но такой код не будет ни читаемым, ни поддерживаемым — несмотря на комментарии.
Излишне мельчить функции — тоже нехорошо.
Это тоже затрудняет понимание работы программы, разбитой на слишком мелкие кусочки.
Интуитивно мне так тоже кажется, но те, кто работал с действительно большими проектами — утверждают обратное. Так что я предпочитаю поверить им на слово. Ну и в принципе, когда я начинаю следовать их советам, то убеждаюсь — действительно, стало намного лучше.

P.S. И извини, но твой код я бы не назвал понятным — ну, по крайней мере тот кусок, который видел. На его разбор я забил уже на десятой строчке, после чего я ограничился просмотром комментариев и оценкой того, как он написан.
0
P.S. И извини, но твой код я бы не назвал понятным — ну, по крайней мере тот кусок, который видел. На его разбор я забил уже на десятой строчке, после чего я ограничился просмотром комментариев и оценкой того, как он написан.
Упс, два раза одно и то же написал.
0
P.S. И извини, но твой код я бы не назвал понятным — ну, по крайней мере тот кусок, который видел. На его разбор я забил уже на десятой строчке, после чего я ограничился просмотром комментариев и оценкой того, как он написан.
Те листинги, что я выкладывал — не законченная программа, а всего лишь набор кусков для тестирования тех или иных функций контроллера и обвески его на плате. Обычно там проверяются разные варианты, что-то остается, что — то ненужное — удаляется или просто забивается комментариями. После завершения тестирования и чистки от накопившегося мусора программа примет уже более нормальный вид.

Также, при добавлении новых функций, я сначала делаю их исполнение монопольным, а уже после проверки — разбиваю на куски, для работы в режиме мультизадачности совместно со всеми остальными.

Поэтому не стоит судить по этим тестовым наброскам о том, как должна выглядеть программа в конечном итоге. Пока я с ней балуюсь, проверяя всякие идейки — и такая мне сойдет. Но после, когда уже соберу все в кучу — обязательно вычищу.

Поэтому, подробно описывая, например, модули своего робота, я не выкладывал их тестовых прошивок, дабы не смущать их сырым видом неокрепшие умы…
Ведь могут подумать, что у меня — все такое.

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

Честно предупредив, что просматривать желательно в родной среде, с подсветкой синтаксиса, иначе из за кучи закомментированных кусков понять там со стороны что-либо сложно…

Теперь же, при обьединении всех модулей в кучу, под эгидой ЦК, я их заново пересмотрю, что-то еще изменю в соответствии с новым видением уже всего комплекса, и фактически скомпоную все заново, на базе уже отлаженных кусков. Тогда уже можно будет и показать их народу…
0
Выкладывал же пару раз эти сырые куски просто чтобы показать сам принцип построения мультизадачности на флаговом автомате, и как вообще выглядит программа в МикроПаскале.
Возможно. Но основное впечатление, которое вызвал у меня сорец — «настоящий программист на любом языке может писать как на фортране». Не уверен, изменится ли эта сторона после вычистки.
Но если у тебя есть образец законченного, хорошего кода — с удовольствием его посмотрю.
Честно предупредив, что просматривать желательно в родной среде, с подсветкой синтаксиса, иначе из за кучи закомментированных кусков понять там со стороны что-либо сложно…
Ну без подсветки я сорцы вообще не смотрю. Родная среда, в принципе, необязательна — практически любой редактор с подсветкой Pascal/Delphi сгодится. Хотя стоит отдать ей должное — базовые зачатки code insight есть и полный проект разумней изучать в среде, а не просто блокноте с подсветкой.
0
Короткие имена — не всегда отражают суть.
Длинные имена — тоже делают программу трудно читаемой.
Да, правильные названия это не просто. Тут на помощь зачастую приходят паттерны, как ни странно. Во многих случаях нет необходимости смотреть, скажем, сам класс, из названия понятно, что он делает.
+1
можно прокомментировать только в стиле «MOV EAX, 10; поместить 10 в EAX»
Но вот зачем утрировать специально в стиле: Заставь дурака молиться — он и лоб разобьет.
0
Затем, что грамотно написанный код ты только так и сможешь прокомментировать — там просто нечего больше сказать в дополнение к тому, что сказано кодом.
0
Отсутствме нормальных комментариев — один из главных признаков упоминаемого здесь многими «быдлокодинга». Через полгода — год автор и сам уже забудет, где и что делает его программа. Чего уж говорить о других, которые будут пытаться ее понять.
Вы не поверите, но нормально написанный код и без комментариев легко читается хоть через неделю, хоть через год. Да, тут важно напомнить, что второй важный компонент этого кода — тесты к нему. Вот они описывают поведение кода (то есть тот самый алгоритм, о котором вы говорите). Название теста зачастую описывает поведение кода в определенной ситуации, например «если входной параметр выходит за нижнюю границу, используем нижнюю границу как значение». Такие подробные коментарии к коду зачастую никто не пишет, да и поддерживать при изменении кода врядли будет. Пропустить это тестом невозможно (иначе соответствующая часть кода не будет покрыта, что сразу видно в результатах автоматической инспекции кода), да и забыть поправить при изменении кода не получится (тест упадет).

P.S. да, это все тоже можно сломать или обойти, но это требует усилий бОльших, чем поддержание кода и тестов к нему в актуальном состоянии.
+1
Мне уже давно интересно, как грамотно делать автоматические тесты для именно mcu? Есть тут кто-нибудь, кто это может объяснить? Статей по данной теме я не видел вообще.

Для обычных приложений, работающих под полноценной ОС, это ещё более-менее понятно, а вот для таких систем…
0
Я уже как-то приводил вот этот линк:«Test Driven Development for Embedded C». TDD практика достаточно экстремальная (и поначалу сильно непривычная), но начав ее использовать привыкаешь и потом трудно писать софт иначе.
0
Спасибо, я посмотрю.
0
Надо понимать не только «как на самом деле работает программа», но и «как она задумывалась». Ну вижу я что на самом деле автор к А прибавляет Б, и что с того? А на самом то деле их-то надо было перемножить. И вместо того что бы прочитать в коммпентарии что А умножается на Б, я начинаю думать самостоятельно, а «что хотел написать автор», копаюсь, долго и нудно дебажу, и трачу 2 дня, взамен 10 минут. Потому как имея комментарий противоречащий коду, это сразу заставляет меня обратить внимание на данный участок, что бы понять, что править, а не искать ошибки дальше в возведениях в степень.
0
В таких случаях нередка и ситуация, когда комментарий говорит А, код делает Б, а на самом деле нужно В. Или комментарий говорит А, код делает Б, а на самом деле нужно Б.
0
Да, но в отладке я вижу что в этом месте что-то не так. Разбираюсь с ним, и выясняю что не так (просто ли в комментарии опечатка, или выполняется не то, что надо), а не просматриваю 200 строк, делающих то что в них написанно, но в итоге получающих неправильный результат.
0
200 строк тебе в любом случае придется просмотреть — чтобы выяснить соответствуют ли они комментарию. А потом еще придется выяснять что правильней — код или комментарий (комментариям свойственно протухать). Стоит чутка запустить — и комментарии будут приносить больше вреда, чем пользы. Именно поэтому evsi так напирает на код — именно в нем точно описано, что делается. А что должно делаться — в таких проектах описывается (и проверяется заодно) тестами. Впрочем, тесты склонны протухать точно так же, как и комментарии, если за ними не следить. От протухших тестов (и комментариев) один вред.
0
Впрочем, тесты склонны протухать точно так же, как и комментарии, если за ними не следить. От протухших тестов (и комментариев) один вред.
Тут на помощь приходит continuous integration и autmated code inspection. Если тесты совсем протухли, просто упадет билд. Если они перестали покрывать код — соответствующий класс попадает в тор по наименьшему покрытию. Впрочем, есть более радикальный способ — TDD.
0
Пренебрегать комментами всё же не стоит, хотя и упарываться ими тоже, если это только не учебный пример.

Хотя бы описание функций и переменных стоит делать. Уровень владения языком (английским и программирования) достаточно разный и очевидный одному код может быть затруднителен к пониманию другому. Или знание английского писателем кода может быть таковым, что косячное название функций будет путать того, кто знает английский нормально. Комментарии могут помочь и с этим.
Да и всякие хитрые и комбо-моменты тоже стоит помечать, особенно низкоуровневые. Бывает так, что важен порядок действий каких-то, стоит об этом предупреждать. Регистры периферии и флаги тоже далеко не всегда очевидны в самоназвании, а тратить время на поиск расшифровок в даташитах… Не лишним было бы подписывать, что происходит при операциях с регистрами.

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

Или пометить, что коду требуются дополнения. Левый человек может и не догадаться, что в каком-то куске «самодокументированного» кода не хватает некоторой не очень важной в данной момент части, но которая может пригодиться в будущем (такое тоже бывает). Её ж нет, вот она и не может сообщить о своём отсутствии.

Язык программирования — это не книжка. И не всё можно выразить кодом так, чтобы любой человек, читающий код, всё до последней инструкции и числа понял. Кода много — человек один.

Отрицать комментарии в принципе — очень странно, как по мне.
+1
Речь не идет о полном отрицании комментариев. Речь о том, что они пишутся только тогда, когда это абсолютно необходимо и по другому не получается. Внешние интерфейсы, неочевидности в коде (вызванные внешними условиями или необходимостью оптимизации), подавление предупреждений и другие подобные ситуации документируются. Но это именно исключения, а не правило.

Или пометить, что коду требуются дополнения. Левый человек может и не догадаться, что в каком-то куске «самодокументированного» кода не хватает некоторой не очень важной в данной момент части, но которая может пригодиться в будущем (такое тоже бывает). Её ж нет, вот она и не может сообщить о своём отсутствии.

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

Вообще объяснять на пальцах то, как пишется «большой» софт достаточно сложно, многие вещи кажутся странными, непонятными или слишком радикальными. Но тут важно напоминать себе, что эти все подходы родились и вошли в повседневную практику не на ровном месте, это квинтессэнция (зачастую достаточно болезненного) опыта разработчиков. Кроме того, «большой» софт имеет свойство превращать в серьезные проблемы даже мелкие шероховатости, на которые в небольшой или средней программе часто можно закрыть глаза. Скажем, в небольшой программе разработчик может полениться и не переделывать код, когда в процессе разработки стало понятно, что какую-то часть можно было сделать иначе, где-то обобщить, упростить и/или повторно использовать код и тому подобное (так называемый «технический долг»). В большой программе такие вещи быстро приводят к тому, что программа начинает разваливаться, становится трудно расширяемой и сопровождаемой. Тут экономия пары часов оборачивается сотнями часов потерь. Поэтому технический долг постоянно контролируется и поддерживается на минимально возможном уровне. Коментарии из этой же оперы. Поддержка комментариев к хорошо написанному коду это время, которое не дает полезного эффекта на выходе. Поэтому от комментариев избавляются настолько, насколько это вообще возможно.
+1
Когда она пригодится, тогда ее и напишут
Мм, возможно, но некоторые вещи могут быть предусмотрены протоколами и быть в состоянии «заглушки» — результат отдаётся, но не совсем актуальный. Или по каким-то причинам не дописали пару редко встречающихся возможностей протокола — не было на чём проверять, а потом и забыли про них. Глядя в код, можно и не увидеть этого (не совершенно зная этот самый протокол, что там нужно что-то ещё). Так хоть краткая заметка в начале файла сможет обратить когда-нибудь внимание на сию несправедливость не совсем осведомлённого человека.
Но это, конечно, тоже достаточно специфичная ситуация.

Но вот эти аргументы мне уже нравятся, да. Соглашусь, я о таком не задумывался.
До этого было как-то слишком невнятно.
0
В моей практике на такие заглушки пишут тесты, которые проверяют, что при попытке использовать нереализованные возможности бросается исключение. Таким образов читая тест легко увидеть, что вот эта возможность протокола не реализована.

Ну и, опять-таки, на практике чтение чужого кода начинается с тестов. Зачастую код теста более информативен на начальных этапах чтения чужого кода.
0
Мне вот и интересно, как эти все тесты запихать в МК…
0
Там выше я дал линк на книжку.
0
В принципе, это тот же С и тесты более-менее можно прогнать, компилируя под ПК, а не целевую платформу. Также можно гонять тесты под симулятором. «Отладчик»-симулятор в упоминавшемся микропаскале так вообще кроме как на прогон тестов ни на что не годится, на мой взгляд.
0
Еще раз: если код нуждается в комментариях, то он написан плохо. Текст программы должен читаться как документация к коду.
Ага. Особенно — на С, где большая часть листинга — закорючки и знаки препинания… Весьма наглядно.
0
Ага. Особенно — на С, где большая часть листинга — закорючки и знаки препинания…
Тем не менее. В той же жабе синтаксис похож и весьма. Это никак не мешает писать самодокументированный код. Исключение может делаться для сильно оптимизированного кода, но это именно исключения, составляющие от силы 1% кода.
0
Ага. Особенно — на С, где большая часть листинга — закорючки и знаки препинания… Весьма наглядно.
При прямых руках это даже для С и С++ справедливо (правда, тут уже нужны очень прямые руки). А код вида «for(;P(»\n"),R-;P("""))for(e=C;e-;P("_"+(*u++/8)%2))P("" "+(*u/4)%2);" вполне успешно пишется на любом языке, включая Паскаль (сам видел).
0
Плохой код тоже полезен. Те же «Алгоритмические трюки для программистов» не прочитать сходу, а такие вставки порой необходимы (обработка больших объемов данных, критичность ко времени выполнения), и такую вставку обязательно надо прокомментировать и дать ссылку на описание алгоритма.
P.S.: не все компиляторы одинакого полезны. Некоторые не имеют достаточного уровня оптимизаторов и библиотек.
0
Вот только не надо «доплат за комментарии» и «оплаты строчек кода». Знакомы мы с такой технологией (а Маяковского не читали, не?). Хорошо если в комментах именно стихи, а не вообще противоречащий с кодом текст.
0
А теперь этот код пускай доработает 5-10 человек, ни как не коммуницирующихся между собой, но пишущих в лучших традициях изложенныж Lifelover'ом: максимальное быстродействие, отказ от ООП, отказ от C++. И получаем отличную помойку, с дублированием одного и того же кода, прямым доступом к памяти и отдельной функцией поиска элемента в массиве в каждом файле (ну каждый же считает что именно его цикл for самый оптимальный).

А доработайте код стека для многопоточности.
Задача разбита, объяснение качественное, код читаем. Но вот реализация глобального массива со смещениями самостоятельно, и махинациями с не своими полями… Это хорошо что протокол утвержден, а стоит попробывать переделать с IPv4 на IPv6 и оппа. Это хорошо, что за него подумали и вписали размеры заголовков/данных и контрольные суммы, я уверен что он сам бы сэкономил бы эти 4 байта, что бы «использовать ресурсы оптимально» (это полностью соответствует излагаемым им принципам).
+1
Сколько вы реально «пунктов меню» (считай вынесенных возможностей) используете в своей среде? Сомниваюсь что за 5% уйдет.
Немного. Но они отсутствуют в большинстве embedded IDE — это отладка, кодонавигация и высокая конфигурируемость среды (включая расширение и настройку интерфейса). Остальные изредка тоже пригождаются.
0
В общем-то отладка нужна часто для изучения новых контроллеров и незнакомой сложной периферии. В даташите-то информация, конечно, есть, но её очень много и, бывает, какую-нибудь приписку не заметишь. Как в STM32F4 чтоб настроить часы нужно снять два бита защиты в разных регистрах, включить тактирование не относящегося к часам модуля, чтоб получить доступ к одному из регистров настройки тактирования (да, вот так).
И поди ты догадайся с первого раза, что код не работает только потому, что один из регистров был защищён и не изменился как тебе надо. Так хоть можно прогнать инициализацию и посмотреть, где результат отличается от желаемого.

Ну или в полезно в поддержке чужого кода. Фиг знает, как и что там работает. Отладка, по крайней мере, поспособствует пониманию сути проблемы, когда такая возникнет.
+1
Да… по ходу больная тема.
Мы друг друга не поняли: я писал о том, что постороннего человека быстрее заинтересовать «простым и красочным», а потом он уже решит — копаться глубже или нет. Я для себя решил, что мне это интересно и буду копать, т.е. перейду теперь к «матчасти». А те кто просто поиграться — так это их дело, хотя, да — некоторые умудряются реализовывать коммерческие проекты — КРАСАВЦЫ!
Надо понимать что вы в разных весовых категориях и я вообще не понимаю какое вам дело кто чем страдает? (*написал не оскорбительно!).
Было еще мнение, что профессионалы пересаживаются на ардуино и «тупеют»…
Это из разряда: «во дворе открылся пивной киоск, значит весь двор сопьется».
+3
Это из разряда: «во дворе открылся пивной киоск, значит весь двор сопьется».
Точно)
Я для себя решил, что мне это интересно и буду копать, т.е. перейду теперь к «матчасти».
Похвально.
+1
некоторые умудряются реализовывать коммерческие проекты — КРАСАВЦЫ!
То есть впарить кому-нибудь дерьмо — уже подвиг?
-2
На каком основании вы решили что это дерьмо? С чего вы утверждаете, что «раз ардуино, значит задача не может быть решена правильно»?
Или самое правильное решение это созданный на ПЛИС контроллер включения лампочки «выключатель в положение ВКЛ — включаем лампочку»? Это же самое что ни на есть промышленное решение! А другие продавать непозволительно!

А ведь это у вас все оттуда же. Безоснавательные утверждения, которые не способны аргументировать. Кстати, где ответ на вопрос:
Позвольте узнать, а что именно «мешает» летать коптеру? Встроенный бутлоадер или Wiring?
+4
контроллер включения лампочки «выключатель в положение ВКЛ — включаем лампочку»
Тебе не надоело выдумывать искусственные примеры про выключатель и светодиодик? Или, поскольку стадо всегда право, неважно что говорить, лишь бы восхвалялась правильная точка зрения?
Такие же примеры выдумывают любители всяких оопов — вроде «общий класс „нота“ с абстрактной функцией „играть“ и подклассы с реализациями» (тот же контроллер лампочки), но на дебилов производит впечатление, потому что они не знают как тоже самое сделать проще, а на примерах чуть сложнее всё это буксует и разваливается.
0
Или, поскольку стадо всегда право, неважно что говорить, лишь бы восхвалялась правильная точка зрения?
А вам, похоже, все равно какую чушь пороть, лишь бы это отличалось от «стада»?
Такие же примеры выдумывают любители всяких оопо
Вообще-то их придумывают такие как вы.
а на примерах чуть сложнее всё это буксует и разваливается.
Только у той категории, на которую ваш пример произвел впечатление.
+2
Вам же не надоело уходить от прямого вопроса.
Позволю себе утверждать, что абсолютное большенство на ардуине мигает светодиодиком и включает релюшки. Ничего удивительного, ведь это и есть её изначальная целевая аудитория. И эту задачу Ардуино выполняет на все 100%. Задача решена максимально просто и максимально быстро, не уступая в качестве, удовлетворяя всем поставленным требованиям.
Далее эта простота мигания светодиодиком позволяет достаточно просто развивать проект. Подключение Ethernet, GPS, SMS модулей сводится к подключению шильда и класса. Вот и всё, у нас рабочий проект, управляющий роботом через интернет. При этом написав базовый класс соединения и отнаследовав соответствующие интерфейсы, вам абсолютно пофигу, буть то интернет, или смс сообщение.
А так же эта простота ни чуть не мешает (позволю себе выделить для вам основное место, вопрос вы всё равно проигнорируете) создавать более объемные и сложные проекты.
Вы вольны применять любые библиотеки, любую среду разработки, и перепрошивать плату ардуино любым удобным для вас способом, для «исключения ограничений встроенного загрузчика» (я помню, что вы жадный до тех 2-х Кб, или сколько он занимает).
P.S.: Ухты, походу я снова «выдумал искуственный пример» и не только я, а и всё «стадо» его выдумало. И, блин, что еще трагичнее, его все «стадо» делает. :)
+1
Одни спецы, пишут сразу правильные прошивки, которые не нуждаються в отладке… Не буду больше спорить с вами, куда мне до Вас…
0
  • avatar
  • Nemo
  • 18 апреля 2013, 15:13
Все бы ничего, но, похоже, все давно уже забыли, что тема — про Ардуино, и пошло сплошь обсуждение технологий написания «больших» проектов, профессиональной разработки софта, документации и тестов к ним…
(Грешен, я и сам тоже немало в этом офтопе поучаствовал.)

Что в большинстве случаев — для Ардуино как бы не актуально…
Ведь она ориентирована больше на простое написание несложных программ неспециалистами.

Да и никто не заставляет насильно ею пользоваться.
Не нравится — не ешь.
0
  • avatar
  • SWG
  • 22 апреля 2013, 14:28
Все методики написания «большого» софта рано или поздно приходят и в «маленький».
0
пошло сплошь обсуждение технологий написания «больших» проектов, профессиональной разработки софта, документации и тестов к ним…
И главное с употреблением «умных», но никому непонятных терминов, без иллюстрации конкретными примерами кода возвеличивают Его Величество некий КОД. На самом деле здесь мало кому интересны правила и способы написания километровых портянок энтерпрайз кода на java, .NET или C1 прикладного ПО для офисного планктона. Может быть еще сюда true хабраменов позвать, что бы они напустили здесь своей «глубокомысленной» и модной пурги.

Надо презимлится все же обратно до уровня ПО для MCU.
0
Вот простой вопрос:
В топике приведен простой код, вроде довольно хорошо и просто написанный, но не комментированный — надо ли комментировать этот/такой типичный MCU код?

У меня самого 2 ответа на этот вопрос(гуманный и «цехово-фашистский»), но я склоняюсь все же к 1-му, т.е. комментировать надо.
0
В топике приведен простой код, вроде довольно хорошо и просто написанный, но не комментированный — надо ли комментировать этот/такой типичный MCU код?
Под самодокументированный код он все равно не попадает (из-за множества majic numbers), так что все равно.
0
На самом деле здесь мало кому интересны правила и способы написания километровых портянок энтерпрайз кода на java, .NET или C1 прикладного ПО для офисного планктона.
Об офисном планктоне речь вообще не шла. А промышленный софт пишется более или менее похоже независимо от языка/платформы.

Надо презимлится все же обратно до уровня ПО для MCU.
Я не понимаю, почему вы считаете, что ПО для встраиваемых систем должно писаться на уровне каменного века.
+1
Как я понимаю раз Arduino это открытый проект, то загрузчик можно скачать из любой платы Arduino. А можно ли где то нарыть исходный код загрузчика для плат Arduino, что бы самому откомпилировать загрузчик под свои потребности.
0
Во первых, «загрузчик ардуино» — обычный AVRBOOT, ардуино практически целиком состоит из сторонних опенсорсных проектов.
Во вторых, исходники ардуино можно слить с ардуиновского же сайта, а исходники бутлоадеров и вовсе идут в комплекте со средой.
0
а исходники бутлоадеров и вовсе идут в комплекте со средой.
Я как раз только прочитал о том что можно изготовить Ардуино-подобную плату и залить в нее загрузчик с помощью программатора из их же среды разработки.
0
За что мне нравится we.easyelectronics так это не только за замечательные статьи но и за комментарии после оных.
Особенно когда разгораются жаркие дискуссии.
Вот почему то с ассациировалось с этим
www.youtube.com/watch?v=c8JBf3kCH_4
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.