Простые устройства
Просто об устройствах

Eclipse+AVR+ARM: первые шаги. Часть четвертая.

Шаг 5: Настройка опций проекта.

Итак, настала пора разобраться с тем, как настроить компилятор AVR-GCC для сборки вашего проекта, потому как далеко не всегда дефолтные настройки, предлагаемые плагином avr-eclipse (а именно этот плагин предоставляет большинство рассматриваемых далее возможностей по настройке) могут вас удовлетворить.

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

Свойства проекта становятся доступным после выполнения команды Properties в меню Project или во всплывающем меню по щелчку правой кнопки мыши над папкой проекта в окне Project Explorer. Выглядят эти свойства в следующем виде:

EclipseТрадиционно слева древовидный список групп параметров, сверху оконце поиска параметра, ну а бОльшую часть окна занимает собственно область настроек. Так как количество параметров просто ошеломительное, я остановлюсь только на реально важных, а остальные, уж извините, оставлю либо «на потом», либо вообще на самостоятельное изучение - важно ведь придать начальное ускорение, а дальше само пойдет, не так ли?

EclipseВ первую очередь обратим внимание на группу параметров AVR.

Как видите, на данном этапе можно лишь включить возможность индивидуальной настройки конфигураций, при этом имеется ввиду настройка именно группы параметров AVRDude и Target Hardware, то есть настроек прошивки и типа МК для проекта. Лично мне представляется логичным, что все конфигурации одного и того же проекта должны иметь одинаковый МК в своей основе и, соответственно, прошиваться однотипно, поэтому смысла разделять настройки по конфигурациям нет. Если вы считаете иначе - поставьте галочку Enable individual settings for Build Configurations, тогда в подгруппах AVRDude и Target Hardware будет доступна возможность выбора конкретной конфигурации.

EclipseНастройки AVRDude мы рассмотрим чуть позже, когда станем осваивать прошивку МК прямо из среды Eclipse, а Target Hardware ничем не отличается от соответствующего режима при создании проекта.

Опция выбора конфигурации Configuration недоступна, т.к ранее не была активирована опция Enable individual settings for Build Configurations, о чем уже говорилось.

EclipseВсе наиболее важные опции проекта спрятаны в группе С/С++ Build.

На показанном на рисунке этапе мы имеем возможность произвести тонкую настройку процесса сборки проекта. В частности, по умолчанию предлагается использовать внешнюю утилиту сборки make с параметрами по умолчанию - так как я сам не сторонник глубокого копания в утилите make (и не без оснований: на английском описание всех ее возможностей с учетом скриптового языка занимает не менее 50 страниц), то и вам не советую. То есть здесь рекомендую оставить все, как есть - маловероятно, что вы когда-либо об этом пожалеете. А вот на закладочку Behaviour все-таки заглянуть посоветую, хотя бы для интереса.

EclipseЗдесь я заострю ваше внимание на опцию Use parallel build. Эта опция доступна только для версии Eclipse Juno (и, наверное, более новых). Если у вас такая опция есть, и вы обладатель многоядерного компьютера, вы можете ее активировать, задать число одновременных потоков компиляции Use parallel jobs и получить существенный выигрыш в скорости сборки сложных многофайловых проектов. Если у вас проекты состоят из одного файла, или компьютер ваш не так крут, или же версия Eclipse у вас не Juno - увы, вам придется довольствоваться тем, что есть, точнее, обходиться без того, чего нет.

{ads1}

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

EclipseНа рисунке вы видите впечатляющий список групп параметров компилятора. 

Сразу обращаю ваше внимание на верхнюю часть окна. Там размещается список выбора конфигурации (Configuration), параметры которой сейчас редактируются, а так же кнопка открытия мастера конфигураций Manage Configurations, который позволит создать или удалить конфигурацию. То есть открыв настройки проекта, вы сможете изменить параметры любой имеющейся конфигурации - следите за этим, чтобы потом не удивляться.

В группе Additional Tools in Toolchain сосредоточены 5 опций для запуска вспомогательных утилит после компиляции проекта. Имейте ввиду, что запускаются они именно в том порядке, ка показаны в окне.

Generate HEX file for flash memory отвечает за создание hex-файла прошивки. По умолчанию эта опция всегда активна для стандартной конфигурации Release, а для Debug по умолчанию отключена.

Generate HEX file for EEPROM отвечает за создание hex-файла с данными для первичной инициализации EEPROM микроконтроллера - если у вас в проекте имеются «переменные» с префиксом EEMEM и с начальными значениями (например, EEMEM uint8_t options = 12;), то активация этой опции приведет к генерации hex-файла, который следует проишить в EEPROM микроконтроллера, чтобы в нужной ячейке оказалось значение 12.

Generate Extended Listing (Source + generated Assembler) отвечает за создание в ходе компиляции lss-файла лстинга. Это заметно замедляет компиляцию, но весьма удобно при анализе качества генерируемого кода.

Print Size нужно активировать, если после завершения компиляции вам нужно знать (а это практически всегда нужно), хватает ли места в памяти МК для вашей программы или нет.

Наконец, активная опция AVRDude приведет к тому, что после компиляции автоматически будет запущена утилита avrdude для прошивки микроконтроллера. Нужно это или нет - решать вам.

Идем далее по списку групп параметров.

AVR Assembler - группа параметров встроенного ассемблера avr-as. В подавляющем большинстве любительских проектов ассемблерные исходные файлы не используются, так что эта группа параметров может считаться условно не важной. И даже если у вас есть в проекте исходники на ассемблере, указанные по умолчанию параметры в этой группе в 90% случаев вас удовлетворят, останавливаться на них не будем.

EclipseВ группе AVR Compiler, как видно на скриншоте, подгрупп гораздо больше, и, кстати, для нас они имеют более высокую важность. На показанном окне вы видите итог установки всех «галочек» в настройках - параметры командной строки All options. Это нужно для того, чтобы профессионал мог проконтролировать правильность своих действий, ну вам - чисто для любопытства.

Рассмотрим подгруппы.

EclipseПодгруппа Directories содержит список путей, где будет вестись поиск подключаемых файлов Include Paths. По умолчанию он пуст, что означает использование только системных путей WinAVR. Если нужно дополнить этот список (например, если вы подключаете стороннюю библиотеку), воспользуйтесь кнопочками над правым верхним углом этого списка. Добавление пути или редактирование списка осуществляется интуитивно понятным образом, надеюсь, сложностей не возникнет.

EclipseПодгруппа Symbols служит для управления глобально определенными символами (макросами). В частности, указание рабочей частоты для проекта осуществляется при помощи определения глобального символа F_CPU, вы можете убедиться в этом при тщательном анализе параметров командной строки компилятора. Глобальный символ от обычного отличается тем, что определяется в командной строке компилятора, т. е. «попадает» в любой компилируемый файл, даже если в директиве #define этого файла этого символ нет. В верхней части окна вы можете видеть список определяемых глобальных символов, а в нижней - список символов, отменяемых глобально. Управление этими списками ведется при помощи кнопок над правым верхним углом списка.

Предположим, в нашем проекте используется отладочный вывод, активируемый глобальным символом DEBUG_PRINT. Чтобы активировать отладочный вывод нам надо в конфигурации Debug определить этот символ, а для конфигурации Release наоборот, исключить. Мы включаем редактирование конфигурации Debug и добавляем символ, нажав кнопочку Кнопочка "добавить":

Ввод символа
Eclipse Жмем ОК и все, символ определен.

Для конфигурации Release аналогично мы должны удалить все определения DEBUG_PRINT, т. е. делаем то же самое, но в нижнем окне (значение символа вводить не надо). Почему недостаточно просто не определять символ отладочной печати для конфигурации Release? Потому, что этот символ мог быть определен внутри одного из исходников явно директивой #define, и тогда этот исходник скомпилируется с отладочным выводом. Явная отмена символа позволит избежать этой проблемы.

EclipseПодгруппа Warnings содержит всего три опции, настраивающие генерацию предупреждений компилятора:

No Warnings - не выводить предупреждения вообще.

All Warnings - выводить все предупреждения (настоятельно рекомендую никогда не отключать).

Warnings as Errors - трактовать предупреждения, как ошибки. Если эта опция активна, то при наличии предупреждений компиляции не будет сгенерирован результирующий HEX или ELF-файл, как при наличии «настоящей» ошибки.

EclipseПодгруппа Debugging содержит всего два раскрывающихся списка для выбора объема отладочной информации в объектном файле Generate Debugging info и для выбора формата отладочной информации. По умолчанию для конфигурации Debug выбираются показанные на скриншоте значения, а для Release отладочная информация не генерируется.

Об отладке в Eclipse разговор отдельный (надеюсь, у меня хватит сил его провести в будущем), но некоторые замечания дать необходимо прямо сейчас. Никто не запрещает отлаживать программы и в среде AVR Studio. Для этого вы обязаны выбрать формат отладочной информации DWARF-2, о чем недвусмысленно говорит примечание в скобочках AVR Studio 4.11 + Debugger. Получив после компиляции с этой опцией ELF-файл, вы просто пытаетесь открыть его в AVR Studio (речь о версии 4.1х, на счет 5.хх или 6.хх ничего не скажу - не знаю!). Студия предложит создать новый проект (согласитесь), затем выбрать МК и отладочную платформу (выбираете правильный МК и платформу AVR Simulator), после чего в отладчике студии вам доступна пошаговя отладка со всеми прелестями прямо по исходному тексту программы!

{ads1}

Абсолютно аналогично следует поступить и для отладки при помощи другого популярного инструмента ISIS Proteus VSM: рисуете схему с нужным МК, «загружаете» в него ELF-файл, скомпилированный с описанной отладочной информацией, и наслаждаетесь отладкой по строкам своих исходников! Только протеус не позволяет вам изменять на ходу значения переменных, а студия - позволяет.

ПодгруппEclipseа Optimization содержит обидно мало параметров... Самый важный - список Optimization Level (уровень оптимизации). Лично я всегда использую оптимизацию по размеру, даже для отладки, хотя в листинге при этом разобраться очень непросто.

Две следующие опции Pack structs и Short enums так же рекомендую оставлять включенными - это заметно экономит память при работе со структурами и перечислениями. А в строке Other Optimization Flags вы можете вручную ввести недостающие опции оптимизатора, как это и показано на скриншоте - эти опции я рекомендую вам, как первостепенные.

EclipseLanguage Standard - это подгруппа настроек стандарта компилятора. ОЧЕНЬ рекомендую настраивать так, как показано. Статья уже разрослась до неприличных размеров, поэтому объяснения почему так, оставим на потом - есть же форум, в конце концов.

EclipseНаконец, подгруппа Miscellaneous содержит возможность добавить вручную любые опции командной строки компилятора, если ранее рассмотренных «галочек» вам по какой-то причине не хватило. Скриншота нет ввиду элементарности.

Переходим к настройкам компоновщика. Компоновщик собирает из готовых объектных файлов итоговый объектный файл, из которого затем могут получаться HEX-файлы и другие.

EclipseВы можете указать местоположение map-файла Map Filename, если место по умолчанию вас чем-то не устраивает, отменить наличие символов в этом файле Omit Symbols, и, главное, вручную добавить показанные на скриншоте опции командной строки, без которых толку от оптимизации будет мало.

В подгруппах Libraries и Objects вы можете настроить списки дополнительных библиотек, подключаемых при компиляции. Например, для работы с функциями sprintf или scanf вам может потребоваться подключение особых вариантов библиотек поддержки фрматированного ввода-вывода (см. документацию avr-libc), что вы и сделаете в подгруппе Libraries.

Если же у вас есть готовый объектный файл, который надо использовать при компоновке проекта (например, это может быть библиотека ), то подключить его можно при помощи списка в разделе Objects.

Делается все это интуитивно понятным образом - если вы разобрались с предыдущими разделами, то и с этими проблем не будет, все полностью аналогично.

{ads2}Оставшиеся группы и подгруппы параметров непринципиальны, они не влияют на процесс компиляции. Предлагаемые по умолчанию настройки удовлетворят вас наверняка всегда. Извините, пропускаю их, иначе конца статье не будет, а рассказать нужно еще о многом. Например, считаю своим долгом обратить ваше внимание на то, что все рассмотренные ранее (и пропущенные тоже) опции в виде привычных галочек или списков, обязательно содержат в скобочках соответствующие им параметры командной строки компилятора. То есть расставляя галочки вы одновременно можете и узнавать «истинное» лицо параметров компилятора или компоновщика.

Еще отмечу, что некоторые нерассмотренные параметры являются параметрами не компилятора, а самой среды Eclipse, например, в группе C/C++ General содержатся те же самые настройки, что и в Window - Preferences. Суть здесь в том, что в Window - Preferences задаются параметры вообще для всех проектов, т. е. параметры по умолчанию, а для выбранного проекта можно настроить все индивидуально и не так, как для всех прочих. Например, по-своему раскрасить автоподсветку синтаксиса. Нужно вам это или нет - решайте сами, но возможность присутствует.

Перейдем на другую закладку окна параметров.

EclipseКак известно, компиляция - процесс многоэтапный, вмешаться в который можно лишь изменив makefile. Для начинающих это не самая простая задача, но кое-что можно сделать и без этого при помощи показанных на скриншоте списков. Pre-build steps - это шаги, выполняемые перед началом компиляции, а Post-build steps - соответственно, после нее. Вы можете ввести тут команду (например, cmd-файл операционной системы или любой exe-файл) и она будет выполнена на соответствующем этапе. Например, я делал утилитку, переконвертирующую кириллические строки в исхонике в кодировку знакогенератора ЖКИ. Ее запуск можно сделать на этапе pre-build, и тогда сборкапроекта осуществится с перекодированными строками. А на этапе post-build можно восстановить исходное состояние исходников (тут уж вы сами при помощи bat или cmd- файлов попытайтесь), чтобы в редакторе продолжать видеть привычные слова и фразы. Поле Descriptions служит для ввода пояснения к введенной выше команде, это пояснение будет выведено в консоль перед запуском соответствующего файла. Имейте ввиду, что по умолчанию кодировка консоли Eclipse какая-то странная, и изменить ее - это фокус еще тот, лучше не используйте кириллицу, так будет проще.

Остальные закладки я не рекомендую трогать, т. к. там находятся настройки тулчейна и некоторых режимов Eclipse, в которых, если честно, я сам не до конца разобрался... Правда, незнание этих опций мне никак не мешало до сих пор - надеюсь, и вам не помешает. Все отлично работает «по умолчанию» - тому и рад.

К сожалению, процесс прошивки переходит в следующую статью - размер этой просто неприличный уже. А потом в планах отладка из-под Eclipse, немного про ARM и всякие тонкости и изыски.

/strong

Комментарии   

#1 druidcat 13.10.2012 19:15
Блин, столько нового узнал. Галочка для многоядерных процессоров очень помогала. Процесс компиляции уменьшился в 2 раза.
+2 #2 ARV 15.10.2012 12:02
кстати, эта галочка и на одноядерных помогает оказывается - сам убедился с удивлением. но и может проблемы создавать, например, компоновщик запустить еще до того, как исходники откомпилированы , в итоге ошибок нет, но ELF-не создан - не из чего :lol:
так что будьте аккуратны

Добавить комментарий

Защитный код
Обновить

Обсудить эту статью на форуме (0 ответов).

Copyright 2019 © simple-devices.ru.
При использовании материалов ссылка на simple-devices.ru обязательна.