Как стать автором
Обновить

Комментарии 23

При сборке проекта в arduino если включить verbose output:

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 C:\Users\hippie\AppData\Local\Temp\build6258644420573998665.tmp/Roof_Controller_v0.4.cpp.elf C:\Users\hippie\AppData\Local\Temp\build6258644420573998665.tmp/Roof_Controller_v0.4.cpp.eep C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-objcopy -O ihex -R .eeprom C:\Users\hippie\AppData\Local\Temp\build6258644420573998665.tmp/Roof_Controller_v0.4.cpp.elf C:\Users\hippie\AppData\Local\Temp\build6258644420573998665.tmp/Roof_Controller_v0.4.cpp.hex

И eep и elf и hex
А как указать опции формата отладочного файла? Дело в том, что не всякий elf скушает AVR Studio 4. Если посмотреть на мой Makefile, то там можно увидеть некоторые дополнительные опции. Без них студия просто аварийно завершается при попытке открыть elf файл.
Я долго искал нужную комбинацию, так как без неё невозможно выполнять отладку в железе.
Возможно вы и правы, но я писал это относительно фразы

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

Я проверил работу с elf-файлом из временной папки. Да, можно его использовать. Я боялся, что в Proteus не будет доступа к исходникам, т.к. у него есть такая особенность, что файл dsn должен находиться в папке с проектом. Но исходники доступны в списке выбора.

У такого подхода есть минус — вы не контролируете параметры выходного объектного файла и его отладочную информацию. Из-за этого вы не сможете подгрузить его в AVR Studio 4 (проверено). Да, доступ к файлу есть, но он бесполезен, если вы используете 4-ку.
avr-gcc можно так же не искать в интернете, где версия посвежей и не качать столетнюю winAvr. Достаточно любым архиватором открыть файлы ардуины и скопировать оттуда компилятор. Затем только по известным шагам, коих тучи в инете, добавить путь для аврки в AvrStudio.

Правда есть один нюанс: новый компилятор конечно лучше оптимизирует код (до известных пределов). Поэтому отладку предпочтительней делать с компиляцией по опции -О0. А далее, когда отладка готова, можно выкинуть неиспользованный код (оптимизировать в ручную) и уже пытаться повысить оптимизацию компилятора. Иногда при опции -О3 оптимизация компилятора доходит до безумия и из кода исчезают целые блоки кода.

Поэтому, если опыта не особо много, не стоит грешить на с руки — проверьте компилятор.
«Грешить с руки» на что? И где гарантии что код с -O0 будет делать то же, что и с -Os? Я вот не разбирался с устройством задержек, но часто их использую. Смотрим delay.h:

#ifndef __OPTIMIZE__
# warning «Compiler optimizations disabled; functions from <util/delay.h> won't work as designed»
#endif


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

Это проще, чем установить среду Arduino? И библиотеки автоматом подключатся (статья об этом)? И где об этом написано?

> Поэтому, если опыта не особо много, не стоит грешить на с руки — проверьте компилятор.

Может покажите как собрать скетч компилятором avr-gcc без Arduino IDE и Arduino-Makefile? Людям не пришлось бы выполнять кучу лишних действий, описанных в статье.

В общем, обычные программеры могут посмотреть на статью под другим углом. Если вы купили плату Arduino Mega 2560 и Ethernet Shield W5100 к нему, но лень искать рабочие исходники для работы с сетью и картой в стиле C++, то вы можете использовать готовые библиотеки Arduino. Вот о чём также речь идёт.

Я не пользователь Arduino, а как раз тот, кто хочет использовать их наработки с дешёвыми платами. И мне привычно как раз использовать C++.
Извините конечно, но большая часть 8 битных ардуин работают на 328p который вообще jtag не поддерживает. Для этого есть debugWire. Кстати есть дешевый отладочный комплект atmel atmega328p xminihttp://www.atmel.com/tools/mega328p-xmini.aspx. Без ардуиновских извращений. На него к стати прошивка есть, и сделан он на 32u, так что скоро будет видимо отладчик для тех же ардуин доступный на али.
Для мелких мк вполне можно обойтись и без отладчика, но когда у вас ATmega128 или ATmega256 и кода под завязку, то без отладчика там делать просто нечего. Вот у вас есть плата Arduino Mega 2560, вы хотите её использовать по-своему, «без ардуиновских извращений». Нужно купить настоящий отладчик, который стоит где-то в районе ~ 10 000 р. А я могу показать как потратить ~1500 р., чтобы получить почти то же (JTAG ICE mkII либо JTAG ICE I, но он не поддерживает ATmega256). Примерно столько стоит китайский комплект Arduino Mega 2560 + W5100.

Вы сможете отлаживать код в AVR Studio 4 (немножко криво и выглядит как костыль, но всё-таки сможете и это лучше, чем ничего). Если есть возможность, то почему бы её не использовать?

А вообще, я не верю в бесплатную отладку AVR от Atmel, лучше буду использовать ARM.
Я вот сам на stm32 решил двигаться, но тут решил часики сделать на имеющейся у меня в количестве ардуине и как то часики уже скоро до wi-fi дойдут. А вообще ардуины на камня вроде 2560 это уже серьезный код, который можно и нужно на арме делать. Кстати, вопрос на засыпку, можно на чем то писать и отлаживать stm8 без ограничений на размер кода?
Не работал с stm8, а IAR разве не поддерживает? На сахаре есть специальная ветка по нему. Отладчик купил на dvrobot, но не помню поддерживает ли он stm8, а так всё работает. Дешево и сердито.
Что-то я не понял. А что осталось, собственно, от Arduino? Стандартные сиплюсплюсные либы? Возникает тогда вопрос в целесообразности оного.

Лошадь сдохла – слезь! ©
Я тоже не понял вопроса.

Есть такой проект, кое-где популярный, называется Arduino Mega Server (здесь есть серия статей о нём). Попробуйте его отладить и поймёте про что идёт речь. Точнее будет идти во второй части, но Способ 3 и картинка к нему — это почти что AMS и есть (его отладка в железе). Сама идея мне понравилась, но вот сопровождение проекта никуда не годится. Достаточно почитать форум проекта.
Попробуйте его отладить и поймёте про что идёт речь.

По правде сказать, я никогда не использовал AMS и тем более не занимался его отладкой. Но до того момента, пока не приобрел JTAG отладчик (кстати такой же, как у Вас), отладка printf-ами было единственное, что было доступно. Скорости разработки этот факт вовсе не добавлял, потому прекрасно понимаю, что представляет собой подобная отладка. Другое дело, что в своих маленьких проектах я, понятное дело, время от времени пользуюсь чужим кодом. В частности и ориентированный на Arduino. Но это не принуждает меня использовать эту среду. Вот потому я и не понимаю, зачем вообще как-либо упоминать привязываться к этой IDE, если от нее почти ничего не осталось.
От неё остался Arduino Framework с готовой стандартной структурой. Этот framework автоматически разбирается в Arduino-Makefile. Я когда-то пытался создать подобный Makefile, чтобы использовать Arduino Framework, но моих познаний не хватило для этого и я забросил идею использовать классы из этого набора, а очень хотелось.
Потом случайно нашёл набор для сборки на github и понял, что это как раз именно то, чего я хотел. Теперь я могу очень просто совмещать свой старый наработанный код с ардуиновским. Это экономит время и упрощает работу.
Поскольку я пользуюсь сложными проектами, то без отладчика соваться туда нет смысла, а вывод в консоль — это черепашья скорость, вот я и нашёл способ как допилить ещё одну недостающую часть.
Теперь я могу к примеру собрать шлюз modbus tcp в modbus rtu и спокойно его отлаживать, а железо то же, что для AMS. Такой шлюз стоит около 20 тыс руб, а я могу собрать его в упрощённом виде за 2 тыс руб. Есть разница? Для простых применений зачем платить больше на порядок?

Если вы хотите убрать Arduino IDE, то как использовать его framework? Вы можете подключить его классы отдельно? Или может напишите всё то же самостоятельно? Зачем?
По большей части arduino-framework является генератором избыточного кода. Когда реализуются проекты типа помигать светодиодом на это не обращается внимание. Но вот если что то серьезное, идуще в конфликт с самим фреймворком — уже генерируется избыточный код. Пример: использование таймера. Обязательно нужно использовать таймер, созданный в фреймворке. А вот физический доступ к таймеру на кристалле, который требует всего три команды — уже недоступен.
Мне лень искать/писать httpd для платы W5100. Пусть будет избыточным пока, главное чтобы функционал работал. Лишнее постепенно обрежу.
У меня есть специальный обёрточный код для прерываний, я могу добавить его в arduino-framework и управлять прерываниями как мне нужно.
Если можешь разобраться в коде, то ограничений особых нет.
Ещё можно использовать связку AtmelStudio 6/7 + VisualMicro. Не нужна мерзкая (имхо) AVR Studio, а симулятор AVR-ок в студии встроенный.
Симулятор в студии нельзя сравнивать с возможностями по симуляции в Proteus, он мощнее гораздо. Одно дело голый мк гонять, и совсем другое, когда он может обращаться из симуляции к реальным устройствам или конфигурационной программе на ПК.

VisualMicro не пробовал, денег на него будет жалко. JTAG отладчик при правильном использовании может покрыть большую часть потребностей по отладке. В Proteus можно отлаживать и части кода и строить красивые графики. К примеру, я в нём отлаживал проект AVR DDS 2.0 — прямой цифровой синтез сигнала на AVR. Просто красота.
вовсе нет. Обычные флаги состояний портов управления в протеусе наблюдать крайне неудобно. При этом запись в флэш полностью отсусствует. Немного подзабыл, но кажется и проблема с записью в EEPROM тоже происходила. Да и некоторые вещи, как специфические режимы ШИМ и таймера отличаются от даташита и реального железа. Так что Протеус это тоже не панацея.

ПС: Хотя в том же протеусе я занимался в свое время отладкой web на enc28j60. Проблемы были только со слабостью компа, но симуляция позволила всю работу сделать. Так же можно при довольно мощьном компе делать отладку и USB-устройств.
Я в Proteus отлаживал RTOS, также отлаживал работу специального класса, который работает с EEPROM как с мелкой файловой системой (EFS: EEPROM File System). Ещё писал панельный файловый менеджер для терминала, который работает с виртуальной sd-картой. С JTAG'ом дольше бы разбирался, а в нём всё быстро можно промоделировать.

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

Что касается регистров, то раньше я отладку делал по способу 2, который сейчас не работает. Там плюсы студии прибавлялись к плюсам Proteus и всё было просто замечательно. Для обучения вообще идеальная комбинация.
Я не спорю, что Протеус лучше. Он правда очень хорош. Но знает себе цену, которую жалко уже мне. Слово «JTAG» некоего сферического ардуинщика в вакууме, который купил железку за пару баксов на поиграть и поэкспериментировать, часто пугает своим тёмным смыслом. А с VisualMicro я или использовал урезанную бесплатную версию, или под акцию попал, но точно не платили и не крякал.

Мне просто кажется, что если человек начал курить отладку через JTAG, то через какое-то время он перейдёт с ардуиновского диалекта на нормальный С (может, с использованием ASF для прототипирования), начнёт лутить платы, а также обрастёт бородой. А связка из свежей студии и бесплатной VisualMicro — это маленькое новичковое счастье из коробки.
Видимо во второй части придётся видео сделать, чтобы борода не отрастала.

Те, кто освоят JTAG хотя бы по моему способу, уйдут в большой отрыв в своих начинаниях по сравнению со своими сферическими коллегами. Это я обещаю.
Если почитать про JTAG в любом из туториалов, становится понятно, что это несложно и общеполезно. Я сейчас воспроизведу свои действия и ощущения, начиная с того момента, когда я 3 года тому купил ардуину:

1. Моргаем светодиодиками, щёлкаем кнопками… — прочие новичковые поделия из области базовой схемотехники. Пока всё прозрачно.

2. Делаем устройства-шутки. Я, например, сделал «журнал посещений» на основе весов, вмонтированных под сиденье стула, в дополнении к бумажному журналу использования прибора. Становится понятно, что датчики могут врать, кнопки дребезжать. Становится известно о такой вещи как прерывания. Пока все понятно, нужно только нагуглить нужный туториал и ещё немного покурить схемотехнику. Время от времени я делал что-то совсем странное, мне не хватало памяти, я полез смотреть, а как люди все это дело отлаживают. Узнал о Proteus и других симуляторах, подумал о покупке JTAG-отладчика, зашёл на Чип-и-дип, ужаснулся ценам. В итоге ограничился протеусом и диагностическими сообщениями через uart

3. Делаем что-то разумное. В моём случае, контроллеры шаговичков вместо сгоревших. Тут начинаются небольшие проблемы: Arduino IDE начинает не хватать даже для редактирования кода, гугление ведет на avr-freaks, где вместо милого digitalWrite используется регистровая магия… Я начал более внимательно вне ардуиновского форума смотреть, как люди пишут под МК, научился читать даташиты, переехал на С и таки купил отладчик за 10 баксов на али. Жить стало проще, жить стало веселей, особенно разбираться с переходом между прерываниями. А борода у меня на момент покупки первой ардины уже была.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории