Sublime Text 2 и avr gcc

Очень долгое время я пользовался для написания кода редактором Notepad++. Программы для AVR микроконтроллеров писал там же, и прямо из редактора с помощью плагина NppExec собирал проект и прошивал. В сообществе есть хорошая статья по настройке Notepad++ и этого плагина для avr gcc. Так у меня в Notepad++ коданды make clean, make all и make program посажены на кнопки F5, F6 и F7 соответственно, я собираю проект, прошиваю микроконтроллер и наблюдаю результат не отрываясь от клавиатуры, это очень удобно и экономит кучу времени. Последнее время я плотно пересел на редактор Sublime Text 2. Это очень классный редактор, с приятным оформлением рабочего пространства и с множеством полезных фич вроде мультивыделения, мини-карты кода, закладками прямо в коде, и т.д. Ну и конечно я захотел перенести возможность работы с avr gcc в Sublime Text 2.

Для Sublime Text 2 нету готовых плагинов, на подобии NppExec, но зато этот редактор позволяет гибко настраивать горячие клавиши, вешая на них выполнение разных комманд, в том числе exec — выполнение консольных комманд. Вообще в этом редакторе можно настроить новую «build system», и собирать проект по ctrl+b (Tools -> Build), но это всего одна команда, а нам нужны три команды на разных горячих клавишах, поэтому будем настраивать именно пользовательские горячие клавиши, а не «build system».
Перед выполнением команды make, файл с кодом нужно сохранить, хотелось бы чтобы по нажатию горячкй клавиши файл автоматически сохранялся перед выполнением make (чтобы не нажимать ctrl+s перед сборкой) но на одну горячую клавишу можно навесить всего одну команду, поэтому нам понадобится плагин ImprovedMacros, в составе которого есть команда run_multiple_commands, которая позволит навесить на горячую клавишу несколько команд, которые будут выполняться по очереди (Об установки плагинов ниже). Мы будем навешивать две команды: save (сохранение файла) и exec (выполнение консольной программы make).

Для настройки горячих клавиш переходим в Preferences -> Key Bindings — User и в открывшемчя файле вставляем следующий код:
[
	//------------- AVR make commands start -------------
	{ "keys": ["f5"], "command": "run_multiple_commands", "args": {"commands": [
		{"command": "save", "context": "window" },
		{"command": "exec", "args": {
			"cmd": "make clean",
			"file_regex": "(.*\\w+\\.[(c|cpp|h|hpp)]):(\\d+):(\\d+:|)\\s.*",
			"encoding": "cp1251"
		}, "context": "window" }
	]}},

	{ "keys": ["f6"], "command": "run_multiple_commands", "args": {"commands": [
		{"command": "save", "context": "window" },
		{"command": "exec", "args": {
			"cmd": "make all",
			"file_regex": "(.*\\w+\\.[(c|cpp|h|hpp)]):(\\d+):(\\d+:|)\\s.*",
			"encoding": "cp1251"
		}, "context": "window" }
	]}},

	{ "keys": ["f7"], "command": "run_multiple_commands", "args": {"commands": [
		{"command": "save", "context": "window" },
		{"command": "exec", "args": {
			"cmd": "make program",
			"file_regex": "(.*\\w+\\.[(c|cpp|h|hpp)]):(\\d+):(\\d+:|)\\s.*",
			"encoding": "cp1251"
		}, "context": "window" }
	]}}
	//------------- AVR make commands end -------------
]

В принципе, на данном этапе можно и остановится, теперь по нажатию F5 у нас будет происходить очистка проекта, F6 — сборка проекта, F7 — прошивка. Если два раза кликнуть по строке с ошибкой в окне вывода, в окне редактора подстветится строка содержащая ошибку, так же перейти на строку с ошибкой в окне редактора можно нажав F4.
Но в окне вывода снизу нет подсветки строк с ошибками и предупреждениями компилятора. В NppExec можно было подсветить строки в окне вывода с помощью простых регулярок.



Сходу, не вчитываясь в выдачу компилятора и не понять, собрался проект или нет (выше на скриншоте 1 предупреждение и 1 ошибка).
Готового решения для подсветки строк в выдаче командной строки я не нашел, поэтому пришлось изобретать плагин для подсветки самому. Плагин называется exec_errors_highlighter. Плагин представляет собой модифицированный скрипт exec, который подключает к окну выдачи командной строки файл оформления и файл языковой разметки, такой же какой используется для подсветки синтаксиса в данном редакторе.
В файле языковой разметки, с помощью регулярных выражений, ищутся строки, содержащие ошибки и предупреждения а в файле оформления данные строки раскрашиваются красным и желтым цветом соответственно. В принципе ничего сложного там нет, при желании можно запросто разобраться и добавить распознавание и раскраску ещё каких нибудь строк или слов.

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



Установка плагинов.

Для установки плагинов откройте папку с дополнениями в Sumlime Text: Preferences -> Browse Packages.
В данную папку скопируйте папки ImprovedMacros-master и exec_errors_highlighter.

UPDATE. (24.08.2014)
В приложении ниже два архива с плагинами, для Sublime Text 2 и для Sublime Text 3.
  • +8
  • 23 июня 2014, 20:27
  • Bonio
  • 2

Комментарии (59)

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

позавчера тоже думал про конденсаторы с твердным диэлектриком и хотел про них написать, а вчера вижу на коте пост с темой и там линк на эти конденсаторы

теперь посмотрим, исполнится ли мое хотение про ws2811

кстати забыл спросить, этот редактор парсит хедеры для подсветки как в нормальных типа emblocks?
0
кстати забыл спросить, этот редактор парсит хедеры для подсветки как в нормальных типа emblocks?
Имеете ввиду, подствечивает ли строки с ошибками в заголовочных файлах?
0
имел в виду автокомплит
0
Из коробки — нет. Может есть плагины, не знаю.
Не забывайте, это все таки всего лишь текстовый редактор, а не IDE.
0
Блин, рано отправил.
Имеете ввиду, подствечивает ли строки с ошибками в заголовочных файлах? Типа таких: test.h:1:16: fatal error: io.h: No such file or directory.
Да подсвечивает. И синтаксис в заголовончых файлах тоже подсвечивается.
0
я думаю имелся в виду парсинг объявлений в подключенных хедерах для последующей подсветки.
кстати. о нормальных иде. эклипс (в частности коиде) подсвечивает все что есть в проекте… что тоже не есть хорошо.
0
А вот такой ещё вопрос. Ворнинги подсвечиваются желтым, ошибки красным, а как обычно подсвечивается Notice сообщение?
Вот вроде такого: «test.c:24:2: note: each undeclared identifier is reported only once for each...»? Сейчас они у меня не подсвечиваются вообще, правильно ли это?
0
В чем приемущество блокнота+компилятор над AVR/Atmel Studio 4,5,6 ???
0
Подсветка синтаксиса гораздо лучше студийной,
не перегруженный, приятный глазу, интерфейс,
блокнот грузится гораздо быстрее монструозной студии,
все действия посажены на горячие клавиши.

Кому как, конечно, больше нравится.
0
а если файлов проэкта больше чем 1, работает? Но вы потеряли возможность дебага (в симуляторе и железе), получилось примерно ардуино среда:)

Мое мнение: AVR Studio 4 — самая удобная и быстрая (конечко согласен с Вами «Подсветка синтаксиса гораздо лучше студийной,»),5 и 6 не удобные монстры
0
В Sublime Text 2 есть возможность создания проектов с множеством файлов.
Дебаг тут, конечно, отпадает, но я им и не пользуюсь.

Из студий, четвертая самая удобная и быстрая, да. Я пользуюсь ей только для прошивки fuse bits.
+1
Но вы потеряли возможность дебага

Здесь говорится про GDB отладчик. Там отладка для STM32, но думаю можно и другой прикрутить.
0
Смотрел на сайте, Sublime Text 2 — цена 70$…
0
Бесплатная версия отличается лишь надписью UNREGISTERED в заголовке, и время от времени выскакивает окошко с предложением купить лицензию. Никаких функциональных ограничений в бесплатной версии нет.
0
скачал с сайта Portable версию, запустил, накидал пару строчек, и никакой подсветки синтаксиса нет…

0
нашел Syntax — > C
0
Пользуюсь уже 4 месяца скачанным с оф.сайта Sublime. Даже не заметил что он платный.
0
Подсветка синтаксиса гораздо лучше студийной,
Речь о 4 студии или 5/6? По моему, с подсветкой VAX в 5/6 блокноту тягаться проблематично (просто потому, что VAX подсвечивает на основе AST, а не просто синтаксиса).
Я так понимаю, никаких фишек, основанных на разборе исходного кода в ST нет?
блокнот грузится гораздо быстрее монструозной студии,
Разве это важно при работе с проектом? Когда надо просто заглянуть в файл или несколько — время запуска важно, и поэтому у меня все сорцы ассоциированы на Notepad++.
Но когда надо работать с проектом — среда открывается один раз и на несколько часов, время запуска тут уже не играет никакой роли, зато влияние среды на скорость работы — вполне заметно.
+1
там нет рефакторинга. на сём можно ставить большой и жирный крест.
0
Мне больше Code::Blocks нравится.
+1
может лучше Eclipse с плагином? Получается эдакий универсальный комбайн, и написать и отладить и в устройство залить можно :)
0
может лучше Eclipse с плагином?
Лучше без плагина.
и написать и отладить и в устройство залить можно :)
Насчёт написать и залить — проблем нет. А отлаживать тоже можно? Каким отладчиком?
0
Получается и новые МК можно отлажива? Xmega?
0
Непонятно где тип МК выбирать. Не подскажете?
0
Хм, похоже выбирается только тип программатора teslabs.com/openplayer/docs/docs/other/avrdev_ver1.pdf нигде в документации по типу камня ничего нет. Знаю что камень выбирается тольо для дудки, в настройках Eclipse секция AVR Dude.
0
Хотя не, если использовать simulavr для отладки, т.е отлаживать в эмуляторе, то у него есть выбор камня. Но xmega оно не поддерживает, судя по списку поддерживаемых камней.
0
Но xmega оно не поддерживает, судя по списку поддерживаемых камней.
Плохо… значит проект больше не развивается.
0
В принципе, судя по коду, можно попытаться поддержку xmega. Там каждый поддерживаемы камень представлен в виде отдельного класса, наследника от AvrDevice, например для Atmega8, класс называется AvrDevice_atmega8, и описан в файле Atmega8.h так:

Pin aref;                       //!< analog reference pin
        HWPort *portb;                  //!< port B
        HWPort *portc;                  //!< port C
        HWPort *portd;                  //!< port D
        ExternalIRQHandler *extirq;     //!< external interrupt support
        IOSpecialReg *gicr_reg;         //!< GICR IO register
        IOSpecialReg *gifr_reg;         //!< GIFR IO register
        IOSpecialReg *mcucr_reg;        //!< MCUCR IO register
        IOSpecialReg *mcucsr_reg;       //!< MCUCSR IO register

        HWAdmux *admux;                 //!< ADC multiplexer unit
        HWAd *ad;                       //!< ADC unit

        IOSpecialReg *assr_reg;         //!< ASSR IO register
        IOSpecialReg *sfior_reg;        //!< SFIOR IO register
        HWPrescaler *prescaler01;       //!< prescaler unit for timer 0 and 1
        HWPrescalerAsync *prescaler2;   //!< prescaler unit for timer 2
        ICaptureSource *inputCapture1;  //!< input capture source for timer1
        HWTimer8_0C*   timer0;          //!< timer 0 unit
        HWTimer16_2C2* timer1;          //!< timer 1 unit
        HWTimer8_1C*   timer2;          //!< timer 2 unit
        TimerIRQRegister* timer012irq;  //!< timer interrupt unit for timer 0 to 2
        HWSpi *spi;                     //!< SPI unit
        HWUsart *usart;                 //!< USART unit

В описалове например для Atmega128 побольше портов и ещё что-то написано(не разбирался) Соответственно, можно попытаться добавить аналогичный файл и описать xmega, собрать эту вундервафлю и посмотреть что получится. Но это для тех, кто хорошо знает структуру камня. Как-то так, вот :)
0
Муторно как-то. Проще писать в эклипсе и отлаживать в студии.
0
Хотя да, похоже там нет реализации для DMA, т.е получается, что поддержку добавить то вроде как можно, но только «урезанную».
0
Хотя да, похоже там нет реализации для DMA
Не только ДМА — PLL, CRC, AES…
0
тормозной он
+1
Да, по сравнению с обычными текстовыми редакторами, или скажем тем же Code::Blocks он субъективно тормознее, но тут ещё от железа зависит. Но это почти что студия, к тому же к нему можно ещё и плагин для ARM-ов прикрутить :)
0
Холивар разводить не буду. Студия это студия, эклипс — это эклипс. Да у Эклипса возможностей много, но писан он на яве… работал в нем. Большие проекты он вприципе обрабатывать не может. А на мелкие слишком монструозен. Но мы отклонились от темы. Авторское решение мне больше понравилось — молодец.
0
А я вот чего думаю. Если к Sublime прикрутить MinGW и запускать программы из самого редактора, то они будут давать вывод в консоль редактора? Или запускаться будут через виндовую консоль?
0
В консоль редактора.
0
А можно это направить в виндовую консоль, как обычно?
0
Можно, с помощью плагина. Я такой встречал, но как называется, забыл.
0
Вот он, кстати, плагин: Console Exec, называется.
0
а кто выложит мейкфайл для авр тулчейна под виндовс без линупсшелла? вчера пробовал перепилить и забил
думал в тулчейне все в комплекте, а тут облом такой
0
Посмотрите тут
0
Vim рулит: там и автокомплит и сниппеты и горячие клавши и подсветки какие хотите и привязывается к компилятору (единстевенное без подсветки ошибок, поэтому этим не пользуюсь) и макросы и т.д. и т.п. в широком изобилии. Вообщем есть АБСОЛЮТНО ВСЕ, что захотите. Давно пишу в нем, первый год было трудно, но потом уже невозможно использовать что то другое.
0
первый год было трудно,

Это ключевой момент — иногда этого времени нет, а Sublime достаточно быстрый и интуитивно понятный — знать клавиши в нем не обязательно, чтобы сесть и работать.

Vim рулит: там и автокомплит и сниппеты и горячие клавши и подсветки какие хотите

Тут это все тоже есть, за счет плагинов. Как и в VIM'e.
0
Тут это все тоже есть, за счет плагинов. Как и в VIM'e.
Один из знакомых сравнивал ST с EMACS за то, что оба по сути написаны на собственном скриптовом языке и позволяют изменить все что угодно — в отличие от VIM'а с его укуренным VimL. Сам он юзает EMACS именно потому, что его можно превратить во что угодно.
0
чую ща будет холивар, который начался из-за меня.
0
Вопрос к автору — закинул плагины. F5-F7 работают, ошибки снизу выводятся, на строчку с ошибкой прыгает… но вот подсветка цветовая не работает… так и задумано?
0
Покажите скриншот.
0
0
У вас и цвет фона нижнего окошка не тот, что должен быть. Похоже, файл с темой не подцепился. Какая версия sumlime text? Какую ОС вы используете?
0
ST3, Windows 7
0
ST3
Очевидно, в этом проблема. Я тестировал на Sublime Text 2.

А в чем отличие вообще 3 версии от 2?
0
Чисто внешне — на мой взгляд 3ий пошустрее работает.
Буду разбираться. ))
0
Вот попробуйте это. Тот же плагин, но должен работать с ST3.
Отпишитесь пожалуйста о результате, желательно со скриншотом. Если сработает, добавлю в статью.
0


Работает! Большое спасибо )))
0
Вот попробуйте это.
404.
0
Файл по ссылке я уже удалил, теперь он прикреплен к статье.
+1
За кодинг style не ругаемся ))) Все дружно смотрим на вывод и цветовую раскраску специально введенной ошибки
0
Хотел заплюсовать статью, оказалось что заплюсовал еще когда первый раз читал…
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.