Комментарии 30
Отличная статья. Спасибо автору.
Я и сам заказал BlackWidow на неделе. Пока прикручиваю SDK к xCode, если не получится Еклипс на очереди.
Я и сам заказал BlackWidow на неделе. Пока прикручиваю SDK к xCode, если не получится Еклипс на очереди.
Не понял только, зачем использовать avr-g++ вместо avr-gcc — проект вроде на чистом Си?
оо хорошая статья, спасибо, давно хотел, но руки недоходили
а сразу вопрос, почему получился более компактный выходящий HEX?
Пока еще не разобрался, хотя он меньше на пару байт всего. Думаю настройки для линкера другие в оригинальной IDE.
просто встречал (в том числе и на хабре) что код получаемый оригинальной де, избыточен сильно…
я ассемблер еще не смотрел, у меня после настройки линкера код стал меньше… потом пробовал крутить компилятор но он не сильно влияет на размер hexa.
спасибо, значит надо поискать получше… мб и найду чего
А можно вопрос? А что, конкретно, вы пытаетесь найти?
откуда появляется разница в размере генерируемого HEX
robocraft.ru/blog/arduino/116.html
вот сдесь пишут под авр процессор с учетом ардуии (если я правильно понял) и получается колосальная разница
Компилируем, загружаем в протеус – работает!
Сравним размеры файлов :)
Ардуиновский Blink.hex весит 2031 байт
Наш hex при оптимизации по размеру (OPT = s) по размеру весит 410 байт
robocraft.ru/blog/arduino/116.html
вот сдесь пишут под авр процессор с учетом ардуии (если я правильно понял) и получается колосальная разница
Компилируем, загружаем в протеус – работает!
Сравним размеры файлов :)
Ардуиновский Blink.hex весит 2031 байт
Наш hex при оптимизации по размеру (OPT = s) по размеру весит 410 байт
Скорее всего в родной среде выключена оптимизация.
По первой же ссылке в гугле:
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
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
О самом устройстве напишите?
Вот за такие статьи я и люблю Хабр.
Кстати, возник вопрос: каким образом скомпилированная программа заливается на Ардуино? В настроеном IDE есть кнопочка? Или автоматом, после билда происходит заливка? Или нужно ручками заливать?
Кстати, возник вопрос: каким образом скомпилированная программа заливается на Ардуино? В настроеном IDE есть кнопочка? Или автоматом, после билда происходит заливка? Или нужно ручками заливать?
Для владельцев Arduino Duemilanove: чтобы скомпилированный hex-файл залился в контроллер через AVRDude, необходимо в его настройках установить частоту передачи данных 57600 bod (в Eclipse — пункт меню Window -> Preferences -> AVR -> AVR Dude, выбрать свою конфигурацию и нажать Edit, в поле ввода «Override default baudrate» установить значение 57600). С частотой, указанной в статье, возникала ошибка доступа к контроллеру (и при попытке заливки прошивки, и при попытке считать тип контроллера и кварца).
Также маленькое дополнение — чтобы не подсвечивалось предупреждение на extern «C» — нужно в самом начале создавать не проект C, а проект C++, и все настройки, которые в статье описаны для компилятора C, устанавливать также и для компилятора C++.
Также маленькое дополнение — чтобы не подсвечивалось предупреждение на extern «C» — нужно в самом начале создавать не проект C, а проект C++, и все настройки, которые в статье описаны для компилятора C, устанавливать также и для компилятора C++.
Для Ubuntu 10.04 понадобиться пакет eclipse-pde.
У меня Mega 2560. По кнопке «Load from MCU» ругается, что не может распознать ответ. По светодиодам видно, что обмен даными происходит, затем железка перезапускается. Указал вручную «ATmega2560». Жму «билд» получаю:
Type unrecognised emulation mode...
Пробовал другие значения, в том числе и ATmega328P. Ошибка сохраняется.
У меня Mega 2560. По кнопке «Load from MCU» ругается, что не может распознать ответ. По светодиодам видно, что обмен даными происходит, затем железка перезапускается. Указал вручную «ATmega2560». Жму «билд» получаю:
Type unrecognised emulation mode...
Пробовал другие значения, в том числе и ATmega328P. Ошибка сохраняется.
Очень хорошо, что научились собирать для avr из eclipse. В eclipse хороший текстовый редактор и отличная навигация по коду.
Вот бы ещё методичку как собирать прошивки для avr из самописных makefile.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Настройка Eclipse для работы с Arduino Uno