Pull to refresh

Comments 30

Отличная статья. Спасибо автору.

Я и сам заказал BlackWidow на неделе. Пока прикручиваю SDK к xCode, если не получится Еклипс на очереди.
Если ни секрет, что собираетесь конструировать?
Мобильную Выключалку/включалку/мониторилку системы отопления в квартире.
А, понятно — «умный дом»,
спасибо за ответ!
Не понял только, зачем использовать avr-g++ вместо avr-gcc — проект вроде на чистом Си?
В wprogram.h есть инклюды которые написаны на с++, они не будут компилироваться с gcc. Хотя если функции типа Serial.print не нужны, можно использовать и с компилятор.
оо хорошая статья, спасибо, давно хотел, но руки недоходили
а сразу вопрос, почему получился более компактный выходящий HEX?
Пока еще не разобрался, хотя он меньше на пару байт всего. Думаю настройки для линкера другие в оригинальной IDE.
просто встречал (в том числе и на хабре) что код получаемый оригинальной де, избыточен сильно…
я ассемблер еще не смотрел, у меня после настройки линкера код стал меньше… потом пробовал крутить компилятор но он не сильно влияет на размер hexa.
спасибо, значит надо поискать получше… мб и найду чего
А можно вопрос? А что, конкретно, вы пытаетесь найти?
откуда появляется разница в размере генерируемого HEX
robocraft.ru/blog/arduino/116.html
вот сдесь пишут под авр процессор с учетом ардуии (если я правильно понял) и получается колосальная разница
Компилируем, загружаем в протеус – работает!
Сравним размеры файлов :)
Ардуиновский Blink.hex весит 2031 байт
Наш hex при оптимизации по размеру (OPT = s) по размеру весит 410 байт
А я понял, в Ардуино IDE core библиотека всегда вся содержится в hex файле, а у них может компилируется библиотека вместе с проектом и в hex заносятся только функции которые использовались.
Скорее всего в родной среде выключена оптимизация.
там тоже все, вроде, включено… разница в библиотеке которая линкуется вся в оригинальной IDE.
Исходники есть, покопаюсь.
По первой же ссылке в гугле:
sourceware.org/ml/crossgcc/2003-12/msg00171.html

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

Решил проверить =>
добавил в свой makefile строчки для компилятора -ffunction-sections и -fdata-sections


ну и конечно -Wl,-gc-sections для линкера:


Ну и написал соответственно простенькую прогу с функцией, -gc-sections пока закомментил.
Откомпилил:


Раскомментил -gc-sections, откомпилил:


Добавил вторую функцию, -gc-sections пока закомментил.
Откомпилил:


Раскомментил -gc-sections, откомпилил:


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

Собственно исходники: Gdocs
О моем сенсоре или об Arduino платформе?
Про железную составляющую сенсора интересно узнать и про сопряжение с Arduino.
Напишу, как только соберу все… я сейчас с сетью разбираюсь.
Вот за такие статьи я и люблю Хабр.

Кстати, возник вопрос: каким образом скомпилированная программа заливается на Ардуино? В настроеном IDE есть кнопочка? Или автоматом, после билда происходит заливка? Или нужно ручками заливать?
Заливается все с помощью AVRDude, он вызывается автоматом после усешного билда. Ну и кнопочка есть отдельная.
Для владельцев Arduino Duemilanove: чтобы скомпилированный hex-файл залился в контроллер через AVRDude, необходимо в его настройках установить частоту передачи данных 57600 bod (в Eclipse — пункт меню Window -> Preferences -> AVR -> AVR Dude, выбрать свою конфигурацию и нажать Edit, в поле ввода «Override default baudrate» установить значение 57600). С частотой, указанной в статье, возникала ошибка доступа к контроллеру (и при попытке заливки прошивки, и при попытке считать тип контроллера и кварца).

Также маленькое дополнение — чтобы не подсвечивалось предупреждение на extern «C» — нужно в самом начале создавать не проект C, а проект C++, и все настройки, которые в статье описаны для компилятора C, устанавливать также и для компилятора C++.
Для Ubuntu 10.04 понадобиться пакет eclipse-pde.
У меня Mega 2560. По кнопке «Load from MCU» ругается, что не может распознать ответ. По светодиодам видно, что обмен даными происходит, затем железка перезапускается. Указал вручную «ATmega2560». Жму «билд» получаю:
Type unrecognised emulation mode...
Пробовал другие значения, в том числе и ATmega328P. Ошибка сохраняется.
Для Mega 2560 нужно выставлять не Arduino в списке "Programmer Hardware (-c)"
а Atmel STK500 Version 2.x firmware

в command preview получаем:
avrdude -cstk500v2 -P/dev/ttyACM0 -b115200 [...part specific options...]

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

Вот бы ещё методичку как собирать прошивки для avr из самописных makefile.

Sign up to leave a comment.

Articles