В поисках альтернативы Atmel Studio

Atmel Studio and avr builder

Atmel Studio

Недавно вышла новая Atmel Studio версии 7.0. Как и все предыдущие IDE от Atmel, она не лишена ряда существенных недостатков:

  1. Отсутствие кроссплатформенности. Только Windows, причем, не ниже Windows 7
  2. Отсутствие поддержки популярных программаторов, JTAG-ов и т.д, только фирменные атмеловские инструменты
  3. Не умеет обновляться - каждую версию приходится ставить отдельно. Причем, если удалить предыдущую установленную версию, то может сломаться последняя.

В качестве альтернативы студии можно использовать любой понравившийся текстовый редактор в связке с системой компиляции и сборки проекта.

Для сборки проекта студия использует утилиту make и генерит makefile. В принципе, makefile можно писать руками, но это не совсем удобно и очень громоздко. Попытки использования разных известные аналогов make (cmake, scons и прочее) желаемого результата также не дали. Хотелось своего велосипеда - чего-то предельно простого, гибкого и удобного. В качестве основы был выбран Python, т.к. его легко использовать не только в качестве языка для написания системы сборки, но и в качестве удобного языка для написания сценариев компиляции.

Утилита AVR builder

Описание сценариев компиляции должно быть максимально простым - для сборки достаточно указать список исходных файлов, модель микроконтроллера и, как правило, его тактовую частоту. Так же хотелось иметь возможность собирать одной командой неограниченное множество различных прошивок (например, debug, release, прошивки для кварцевых резонаторов разных частот и т.д.)

Минимальный файл конфигурации выглядит так:

name = ‘my_project’
src = ['src/*.c’]
mcu = 'atmega8'
frequency = 16*1000000

Этот файл сохраняется под именем make.builder в корень проекта. Утилита при запуске читает этот файл, создает директорию build и запускает компиляцию. В случае успеха будет создан файл прошивки build/my_project.hex.

Дополнительно в файле конфигурации можно указать параметры программатора (используется avrdude), набор макросов препроцессора и опции компиляции.

name = ‘my_project’
src = ['src/*.c', 'src/lib/*.c’, “src/*.s”]
mcu = 'atmega8'
frequency = 16*1000000

# параметры вызова avrdude
port = ‘com1’
baudrate = 1200
programmer = ‘usbasp’

# макросы
defines = ['GLCD_DEVICE_AVR8', 'GLCD_CONTROLLER_PCD8544', 'GLCD_USE_AVR_DELAY', '__DELAY_BACKWARD_COMPATIBLE__']

# опции компилятора и сборщика
compiler_options = ['-Os']
linker_options = ['-Wl,--relax']


configurations = {
	"debug": {
		"name": “my_project_debug",
		"defines": ['DEBUG=1’]
	},
	"release": {
		"name": “my_project_release",
		"defines": [‘DEBUG=0’, ‘NDEBUG’]
	},
	“demo”: {
		"name": “my_project_demo”,
		"defines": [‘DEBUG=0’, ‘NDEBUG’, ‘DEMO_MODE’]
	}
}

Теперь скомпилированную прошивку можно залить на устройство командой

builder upload

Кроме того, в этом примере определены макросы препроцессора, которыми можно задавать параметры сборки.

При необходимости можно указать и параметры компиляции и сборки. По умолчанию билдер задает эти параметры так, чтобы на выходе получалась максимально компактная и оптимизированная прошивка. На моих примерах размер прошивки получался меньше, по сравнению с размером прошивки, собираемой Atmel Studio 7 для release-сборки с параметрами по умолчанию.

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

Команда

builder all

соберёт все сборки и положит их в директорию build

Команда

builder release demo

соберёт только сборки release и demo

Команда

builder clean debug upload 

очистит содержимое каталога build, затем соберет сборку debug и запишет ее на устройство.

Если в конфигурации конкретной сборки определен параметр, который уже определен в общей конфигурации (например, параметр “name”), то его значение будет взято из параметров сборки если параметр не является массивом. В случае массива значение параметра будет взято из объединения массивов общих параметров с параметрами сборки.

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

Сейчас утилита умеет собирать проекты из исходников на С и ассемблере (файлы с расширением .S). Работоспособность проверялась под Mac OS X и Windows. Сборщик пытается автоматически определить местоположение исполняемых файлов avrgcc, и если у него это не получилось (или получилось плохо), то путь к компилятору можно определить в переменной среды AVR_GCC_HOME (должна указывать на директорию c исполняемыми файлами avr-gcc, avr-objcopy, avr-objdump, avr-size и avrdude).

Примеры использования сборщика можно посмотреть в следующих проектах:
https://github.com/trol73/avr-ic-tester
https://github.com/trol73/avr-lamp-timer
https://github.com/trol73/avr-turnlight-relay

Выбор альтернативной IDE

Что же касается текстового редактора, то перепробовав разные варианты я остановился на IDE NetBeans. Из коробки она умеет работать с файлами Си и ассемблера, запускать сборку с отображением ошибок компиляции и возможностью перехода в строке файла с ошибкой. Так же NetBeans имеет средства рефакторинга - можно, например, переименовывать переменные и методы в исходниках. В итоге, по удобству работы NetBeans, как мне показалась, превосходит AtmelStuidio. Правда, при работе в Windows в последней версии NetBeans замечено некоторое количество некритичных но неприятных багов.

Netbeans IDE

Вообщем-то почти аналогичными возможностями из коробки обладает IDE Eclipse CDT. Но тут, как минимум, все хуже а ассемблерными файлами - подсветка синтаксиса примитивнее и нет возможности перемещаться по объектам как по ссылкам (по крайней мере, на момент написания статьи).

Еще можно использовать текстовые редакторы вроде Vim, Atom или Sublime, плагинизация которых позволяет получить вполне работоспособный инструмент, но это требует значительно большего количества времени и знаний. Лично мне наиболее простым показался Atom, в котором достаточно быстро удалось настроить сборку проекта с возможностью навигации по ошибкам/ворнингам и подсвечивания их в коде, но возможность рефакторинга отсутствовала.

Под Mac OS X достаточно удобным показался Xсode - тут из коробки для Си-проектов у меня заработало все кроме рефакторинга.

В качестве Makefile используется файл вида

all:
	python ~/bin/avr-builder/builder.py

Проект утилиты-сборщика можно скачать с гитхаба: https://github.com/trol73/avr-make

Рейтинг: 
0
Голосов еще нет