Sublime Text 2 как IDE для STM32


Но я ошибался, и рад этому. Его можно и нужно использовать как IDE, в полном смысле этого слова: парсинг, контекстное автодополнение, сборка, прошивка, отладка. Всё это доступно, и я расскажу как. Только один нюанс: я использую Ubuntu, так что пользователям Windows придётся переложить всё на свой лад.
Инструментарий
Для начала надо научиться собирать проекты, используя имеющийся инструментарий. Так что затариваемся всем, что понадобится:- cmake, make. Последний есть у любого линуксоида, да и cmake скорее всего тоже. Но не помешает проверить
- git. Можно и без него, но с ним удобнее.
- Тулчейн. Я использовал Sourcery CodeBench Lite Edition. Качаем с сайта разработчика. Лучше скачать не дистрибутив, а архив, распаковать как есть и положить в каталог, доступный для записи. Путь к нему запомнить, или записать на бумажке
и съесть - Стандартная библиотека периферии. Ну уж это должно у вас быть, если что — качается с сайта ST. Так же распаковываем архив не меняя структуру каталогов, складываем в укромное место, путь помним.
- Проект stlink, если будете прошивать через DISCOVERY. Взять можно тут, там подробная инструкция по сборке, или найти бинарник. Собственно один он нам и нужен. Так же не устанавливаем его, а складываем в укромное место.
- Проект stm32-cmake, за который огромное спасибо товарищу Kosyak , который написал статью про использование CMake и GCC для программирования STM32. Проект берём тут, распаковываем и складываем аналогично.
- И виновник торжества — Sublime Text 2, который забираем с официального сайта. Ставить не спешим, отложим в сторонку
Теперь нам надо подготовить stm32-cmake, т.е. собрать и установить библиотеки. Там же, на гитхабе, есть инструкция, что надо делать. В кратце:
cd /путь/к/stm32-cmake/cmsis
cmake -DCMAKE_TOOLCHAIN_FILE=../gcc_stm32.cmake -DCMAKE_INSTALL_PREFIX=/путь/к/тулчейну/arm-none-eabi/ -DCMAKE_BUILD_TYPE=Release
make && make install
cd /путь/к/stm32-cmake/stdperiph
cmake -DCMAKE_TOOLCHAIN_FILE=../gcc_stm32.cmake -DCMAKE_INSTALL_PREFIX=/путь/к/тулчейну/arm-none-eabi/ -DCMAKE_BUILD_TYPE=Release
make && make install
Сборка
По идее всё готово, можно проверить, как работает сборка. Для этого копируем из stm32-cmake папку с примером, например stm32-blinky (это программа мигания светодиодом), куда-нибудь, переходим в этот каталог и выполняем:cmake -DSTM32_CHIP_TYPE=MD_VL -DCMAKE_TOOLCHAIN_FILE=/путь/к/stm32-cmake/gcc_stm32.cmake -DCMAKE_BUILD_TYPE=Debug .
где STM32_CHIP_TYPE — тип линейки МК:
- HD — High Density MCUs
- HD_VL — High Density Value Line MCUs
- MD — Medium Density MCUs
- MD_VL — Medium Density Value Line MCUs
- LD — Low Density MCUs
- LD_VL — Low Density Value Line MCUs
- CL — Connectivity Line MCUs
- XL — XL Density MCUs
Внимательнее с точкой в конце команды: она означает искать исходники в текущем каталоге, иначе вместо неё надо указать путь к каталогу с исходниками.
Если появились ошибки — анализируем, но на этом этапе всё должно работать нормально, во всяком случае я граблей не обнаружил. Ну а если отработало без ошибок, в каталоге с исходниками появится Makefile. Он-то нам и нужен. Теперь достаточно просто выполнить make в каталоге с ним, как проект соберётся, и мы увидим файл имя_проекта.elf. Если нужен бинарник или HEX, то после делаем make имя_проекта.bin или make имя_проекта.hex
Но не всё так просто. Дело в том, что в примере уже создан корректный CMakeLists.txt, а для нового проекта его придётся написать самому, используя шаблон. Так же меняются параметры cmake в зависимости от типа сборки или линейки МК. В процессе ковыряния всего этого дела и прикрутке его к нашему Sublime Text меня это так задолбало, что я решил упростить жизнь себе и вам, написав интерактивный скрипт. Он задаёт вопросы, после создаёт каталог с проектом, а в нём уже готовые и настроенные файлы.
Скрипт берём тут, редактируем его. В самом начале надо задать несколько переменных. Это пути к библиотеке, к тулчейну, тип МК, память и т.д. В основном они задают дефолтные значения, т.е. можно пропустить потом эти вопросы, но пути надо указать в любом случае. Кроме корректных параметров сборки, скрипт еще создаёт проект для Sublime Text, который вручную с первого раза настроить довольно проблематично. Запускаем, отвечаем на вопросы (если переменные нормально настроили, надо будет только задать имя проекта, и потыкать Enter'ом. Хотя и имя можно использовать дефолтное).
Скрипт общается на русском, кому не нравится — переводите сами.
Настройка Sublime Text
Добрались и до него. Распаковываем, запускаем
На первый взгляд действительно обычный текстовый редактор. «В чём сила, брат? Сила — в плагинах!»
Что нам потребуется: это плагин SublimeClang — парсер языка C/C++/ObjC/ObjC++ и SublimeGDB — плагин для работы с одноимённым дебаггером. Как устанавливать плагины? Легко! У него даже есть собственный пакетный менеджер! Его-то и поставим. Для этого откроем консоль (не системную, а консоль ST, открывается на Ctrl+` ). Копипастим туда это:
import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'
Смотрим в статус-бар, ждём. Да, нужно соединение с сетью, он всё скачивает сам. Как отработает, нажимаем Ctrl+Shift+P — своеобразная командная строка, пишем в поиске install (должно всплыть Package Control: Install Package), выбираем, подгрузится репозиторий с плагинами, в строке поиска пишем SublimeClang, выбираем, ждём загрузки.
После установки SublimeClang он отказывается работать — выскакивает сообщение, что он запущен, но не работает. Может у вас заработает, но у меня на двух машинах с Ubuntu 10.04 и Ubuntu 12.04 не вышло. Что-то с версиями Python. Хотя гугл быстро подсказал решение, цитирую его сюда полностью:
Собрал Python2.6 с помощью PythonBrew:
curl -kL http://xrl.us/pythonbrewinstall | bash
source "$HOME/.pythonbrew/etc/bashrc"
pythonbrew install --configure="--enable-unicode=ucs4" 2.6
2. После этого создал символическую ссылку так:
sudo ln -s $HOME/.pythonbrew/pythons/Python-2.6/lib/python2.6/ /usr/lib/sublime-text-2/lib/python2.6
ln -s $HOME/.pythonbrew/pythons/Python-2.6/lib/python2.6/ <your Sublime Text 2 folder>/lib/python2.6
3. Поставил llvm-3.0-dev для libclang.so 4. Собрал libcache.so. Либо скачать с оф. сайта, либо по инструкции:
mkdir -p .config/sublime-text-2/Packages/SublimeClang/src/build/
cd .config/sublime-text-2/Packages/SublimeClang/src/build/
cmake ..
make
После тупого выполнения этих команд Python пересобирается, и создаётся ссылка в папку установки программы в /lib/python2.6. Перезапускаем Sublime, сообщения об ошибке быть не должно.
Конечно первым делом хочется испытать, что и как тут работает. Открываем main.c, и видим, что ни один идентификатор не опознан, всё выделяется красным. Происходит это потому, что парсеру надо передать те же настойки, что и настоящему компилятору, которым будет собираться проект. Например пути поиска (он же не знает, где наши инклуды. Компилятор берёт их и Makefile, туда они попадают из конфигурации cmake и т.д.). Так же некоторые дефайны, например -DSTM32F10X_MD_VL, иначе он не распарсит stm32f10x.h (там затычка с ошибкой).

Всё это лучше сделать в настройках проекта. Открываем меню Project -> Save project as и сохраняем. Потом Project -> Add Folder to Project — можно добавить каталог с проектом. Теперь открываем сам файл проекта на редактирование Project -> Edit Project.
Видим следующее
{
"folders":
[
{
"path": "/home/ploop/tmp"
}
]
}
Туда можно добавить конфиг парсера, и он будет относиться к конкретному проекту. Пример можно посмотреть в общем конфиге — Ctrl+Shift+P — clang — выбираем Preferences: SublimeClang settings default — откроется файл с дефолтными настройками, там полно комментариев. В общем случае это будет выглядеть так:
{
"folders":
[
{
"path": "."
}
],
"build_systems":
[
{
"name": "ARM build",
"cmd": ["make"],
"working_dir": "${project_path}/src/"
},
{
"name": "ARM hex",
"cmd": ["make", "project1.hex"],
"working_dir": "${project_path}/src/"
},
{
"name": "ARM bin",
"cmd": ["make", "project1.bin"],
"working_dir": "${project_path}/src/"
}
],
"settings":
{
"sublimeclang_options":
[
"-std=c++11",
"-Wall",
"-I/home/ploop/projects/STM/stm32f10x/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/",
"-I/home/ploop/projects/STM/stm32f10x/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/",
"-I/home/ploop/projects/STM/stm32f10x/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/",
"-I${folder:${project_path:project1.sublime-project}}/src",
"-DSTM32F10X_MD",
"-DUSE_STDPERIPH_DRIVER"
]
}
}
Понятно, что прописывать всё это вручную при создании проекта не очень интересно, да еще и с CMakeLists.txt возиться, поэтому я и взялся за скрипт. Короче скрипт уже должен был создать файл .sublime-project в каталоге с проектом, уже со всеми настройками. Можно открыть его и подредактировать в случае необходимости.
Обратите внимание на секцию build_systems. Это настройки сборки. Каждый такой блок добавляет в меню Tools -> Build systems новый пункт, выбрав который можно запустить сборку по хоткею Ctrl+B. Пункты говорят сами за себя. По сути туда прописать можно что угодно.
Выбираем в меню ARM build, нажимаем Ctrl+B и имеем свежий эльф, который хоть сейчас заливай в МК. Но просто залить неинтересно, нам бы по брекпойнтам попрыгать…
Отладка
Уже понятно, что за отладку отвечает плагин SublimeGDB, который должен быть уже установлен. Но и тут без граблей не обошлось. Я убил сутки, чтобы его запустить, так и не удалось. Уже стал грешить на плагин, полез на гитхаб искать форки, их нашлось штук 20, ничем примечательным они не отличались, по описанию тупо копии. Единственное, в рейтингах у всех было ноль звёзд, от силы одна, а у одного из них — 52!
Интуиция не подвела: он заработал сразу! Берём его тут, распаковываем, удаляем всё содержимое из папки старого плагина (~/.config/sublime-text-2/Packages/SublimeGDB/) и копируем туда новые файлы. Sublime я даже не перезапускал, после удаления он сообщил, что плагин исчез, после копирования тут же увидел его и предложил запустить. Умный, зараза.
Настраивается он проще, чтом Clang. Надо в проект в секцию Settings добавить пару строк:
"sublimegdb_workingdir": "${folder:${project_path:project1.sublime-project}}/src/",
"sublimegdb_commandline": "/путь/к/тулчейну/arm-none-eabi-gdb --interpreter=mi -command=${project_path:gdbcommands}",
и создать файл команд дебаггера в каталоге с проектом (или любом другом, но указать его в параметре -command= что выше)
tar ext :4242
file /путь/к/бинарнику.elf
load /путь/к/бинарнику.elf
Первая команда говорит дебаггеру, чтобы тот соединился с сервером удалённой отладки на локалхосте на порте 4242, остальные указывают на наш бинарник. Настройки внутри файла проекта и файл с командами мой скрипт так же формирует, чтобы не париться.
После того, как всё создано, можно приступить к отладке. Для этого подключаем девайсы к компьютеру (программатор st-link и целевой МК), запускаем утилиту stlink (с параметром -1 если у вас st-link версии 1, или без параметров, если V2), смотрим на консоль, чтобы она соединилась с железом и начала слушать порт 4242. Если будут какие-то проблем с USB или определением девайса, советую посмотреть этот блог, там коротко и ясно описано, как его завести под линуксами.
Далее — в Sublime ставим брекпойнты (доступны из меню, хоткеи можно посмотреть на странице плагина или в настройках в папке плагина), нажимаем F5. При этом смотрим на консоль st-link'а в ожидании заветной надписи GDB connected
Плагин подвисает секунд на 5-7, затем открываются отладочные окна, метка ставится напротив строки с брекпойнтом, можно попрыгать по ним по F9-F10-F11, видно переменные, всё как обычно но не перегружено.
Работает довольно шустро. По ощущениям — скорость ограничена только SWD, а не мостроидальным интерфейсом, как в Eclipse, когда непонятно, то ли что связь тупит, то ли Eclipse не прорисовал свои рюшки. Досконально я с ним еще не разбирался, проверял на обычном мигающем светодиоде.
Вердикт
Вот такими возможностями обладают «гламурные блокнотики». Коенчно, не без плясок с бубнами, но работает. Но всё-таки основная фишка Sublime — редактор, от которого просто прёт! Даже с дефолтными настройками.
Сделать на основе всего этого сборку для AVR тоже не составит труда, вот с отладкой не знаю как, не интересовался.
Всё вышепроделанное мной конечно не вариант для нормальной работы, единственный верный вариант — написать свой плагин. Но на изучение Python'а времени пока нет.
- +5
- 28 августа 2012, 11:02
- ploop
Кейл все равно круче всех :) Ты из какой либо другой IDE можешь на лету через JTAG/SWD править настройки тактового генератора? Настраивать порты, а потом смотреть что получилось?
Кейл все равно круче всехНо редактор у него убог :)
Если тулченовский GDB позволяет такие фичи, что это вполне можно реализовать в плагине. Я так глубоко не копал.
Редактор как редактор. Код можно и в блокноте писать, а отладочные фичи это мега тру. Насчет GDB не знаю, но вот CoIDE такое, например, не умеет. Она в лучшем случае покажет тебе регистры. Сиди там и надрачивай биты А вот чтобы так:

расписать чет я там ничего похожего не нашел. Раскурить бы еще как в Keil логический анализатор внутренний включить…

расписать чет я там ничего похожего не нашел. Раскурить бы еще как в Keil логический анализатор внутренний включить…
Ээээ… Ну да, красиво, спору нет. Только эта тулза мне сильно напомнила ST-шную Peripheral Library — буковок много, а по сути бесполезно ибо не решает главной задачи — создать уровень абстракции для упрощения жизни программиста. IMHO, нормальная либа делает все эти красивые картинки ненужными или, как минимум, крайне редко используемыми.
А почему возникла ассоциация с именно Peripheral Library?
Мне эта тулза скорее напомнила что-то вроде ST-шного бесполезного MicroXplorer, или скорее даже Clock Tool.
Мне эта тулза скорее напомнила что-то вроде ST-шного бесполезного MicroXplorer, или скорее даже Clock Tool.
Только не надо путать. Это не настройка-визард. Это непосредственное управление реалтайм. Например, можно нажирать буфер отладочных данных, а потом нажать паузу, вручную настроить DMA и скормить его чере UART наружу, а прога будет спокойненько стоять себе на паузе. Отладка с такими штуками вообще кайф.
«Нормальная либа» суть сферический конь в вакууме. Либо она будет всепоглощающей, но жирной и тормозной, либо узкоспециализированной с допиливанием на месте под задачу.
А сие средства кела не замена либе, а возможность быстро найти нужное, не глядя в мануал вообще, понять, что происходит и на лету поправить, поглядеть как будет работать дальше.
А сие средства кела не замена либе, а возможность быстро найти нужное, не глядя в мануал вообще, понять, что происходит и на лету поправить, поглядеть как будет работать дальше.
«Нормальная либа» суть сферический конь в вакууме. Либо она будет всепоглощающей, но жирной и тормозной, либо узкоспециализированной с допиливанием на месте под задачу.Допиливать придется по любому. Что же до тормозов, то правильное применение плюсовых темплейтов позволяет получать код который не уступает ползанию по регистрам руками. Достаточно посмотреть либы камрада neiver , что бы убедиться, что это вполне реально.
А сие средства кела не замена либе, а возможность быстро найти нужное, не глядя в мануал вообще, понять, что происходит и на лету поправить, поглядеть как будет работать дальше.Если в рантайме поковырять, то да, штука полезная.
Это визард. В режиме отладки также видно значения регистров и есть возможность их изменять. Если необходимо, то где то после 19:00 выставлю скрины в режиме отладки.
Как говорят — «Обещанного три года ждут». Выкладываю скрины CoIDE в режиме отладки, и скрин детального просмотра одного из регистров модуля тактовой частоты. Все значения которые с атрибутом R/W можно менять.
Вообще эта IDE меня привлекла несколькими вещами:
1. Простота в использовании (никаких сто тысяч опций). Просто понятно = надежно
2. Основана на Eclipse. Что не говорите но это не VIM. Я уважаю VIM но здравый смысл должен побеждать. Кто хоть раз правил код в средах с подобным функционалом меня поймут, всем остальным — я пользовался VIM а Вы пользовались Eclipse?
3. Добавление библиотек одним кликом.
В общем — Welcome in XXI century господа!
Джерело: CoIDE
Джерело: CoIDE
Вообще эта IDE меня привлекла несколькими вещами:
1. Простота в использовании (никаких сто тысяч опций). Просто понятно = надежно
2. Основана на Eclipse. Что не говорите но это не VIM. Я уважаю VIM но здравый смысл должен побеждать. Кто хоть раз правил код в средах с подобным функционалом меня поймут, всем остальным — я пользовался VIM а Вы пользовались Eclipse?
3. Добавление библиотек одним кликом.
В общем — Welcome in XXI century господа!


Вот как выглядит отладка в sublime: dl.dropbox.com/u/22991016/images/GDBRegisters.png
Но редактор таки аппетитный. После Code Warrior, с которым в последнее время очень много имею общих дел, вообще…
Редактор суперский! Да и для сборки отлично подходит (парсер нормально работает). Дебаг глубоко не ковырял, но переменные посмотреть, пошагать можно.
В общем, как я вчера ни игрался, а даже после пересборки Python Clang работать наотрез отказался. Хотя у меня тоже Ubuntu 12.04. Или я что-то не так делаю, или не совсем универсален такой метод… Кстати, подобные жалобы вчера в сети тоже встречал.
Вот так:
<your Sublime Text 2 folder> заменишь на путь до Sublime
ln -s $HOME/.pythonbrew/pythons/Python-2.6/lib/python2.6/ <your Sublime Text 2 folder>/lib/python2.6
<your Sublime Text 2 folder> заменишь на путь до Sublime
да, все четко по инструкции, без самодеятельности.
Снес и перераспаковал sublime text, проделал все заново, теперь при запуске вылетает окошко «It looks like libcache.so couldn't be loaded. On Linux you have to compile it yourself.» Жесть какая-то. =))
Снес и перераспаковал sublime text, проделал все заново, теперь при запуске вылетает окошко «It looks like libcache.so couldn't be loaded. On Linux you have to compile it yourself.» Жесть какая-то. =))
Не знаю, с чем конкретно была связана неудача при первой попытке, но прошлой ночью парсер нормально запустился (с сопутствующими, конечно, плясками, связанными с установкой недостающих пакетов и утилит, но все же). Подозреваю, что в первый раз:
1. Либо криво пересобрался python;
2. Либо нахомутал с символической ссылкой;
3. Либо провтыкал важный warning в терминале, вследствие чего не собрался/не был установлен какой-либо пакет.
Кстати, касательно двухоконных файловых менеджеров: Krusader в упор отказывается видеть бинарник sublime_text, если в названии папки, его содержащей, присутствуют пробелы (а именно в таком виде она распаковывается по дефолту: «Sublime Text 2»). Пришлось переименовать в «sublime-text-2».
Такие дела…
1. Либо криво пересобрался python;
2. Либо нахомутал с символической ссылкой;
3. Либо провтыкал важный warning в терминале, вследствие чего не собрался/не был установлен какой-либо пакет.
Кстати, касательно двухоконных файловых менеджеров: Krusader в упор отказывается видеть бинарник sublime_text, если в названии папки, его содержащей, присутствуют пробелы (а именно в таком виде она распаковывается по дефолту: «Sublime Text 2»). Пришлось переименовать в «sublime-text-2».
Такие дела…
Тупо использую Keil, Visual Studio и J-Link
Keil Logic Analyzer описан в подборностях на сайте и в Help. Удобный.
Keil Logic Analyzer описан в подборностях на сайте и в Help. Удобный.
и таких очень много… наверное все такие тупые, что десятилетиями пользуются гамаком вместо хорошего текстового редактора.
я не очень дискусси понимаю — каждый пользуется тем чем хочет. Человек написал — спасибо ему. Он же не говорит, что все должны этим пользоваться. Зачем писать, что vim, eclipse, keil, etc. лучше?
чтобы молодые не кидались на новомодные инструменты которым только предстоит доказать свою жизнеспособность, чтобы расширяли кругозор, обращали внимание на классические инструменты.
Меня очень сложно отнести к молодым. Но я совершенно уверен, что никто из молодежи совершенно не пострадает от отсутствия знаний об этом «классическом» инструменте. Да, по необходимости я vi пользую и, вобщем, не испытываю дискомфорта. Но пользоваться им постоянно, тем более для написания кода я стану только от очень большой нужды. И уж тем более не стану его рекомендовать молодежи.
P.S. из «классического» в нем, разве что, пример того, каким вычурным может быть стиль мышления другого человека…
P.S. из «классического» в нем, разве что, пример того, каким вычурным может быть стиль мышления другого человека…
для меня это означает, что ты не потрудился, осваивая vim (не путай с vi, ты очень вряд-ли его видел). это очень удобный и человечный редактор. нужно только хорошо разобраться с правилами и мнемониками.
для меня это означает, что ты не потрудился, осваивая vimЭто ничем не обоснованное утверждение. Как раз тогда, когда я начинал его изучать (лет 15 назад), это потребовало изрядных усилий.
VIM - Vi IMproved
version 7.3.35
by Bram Moolenaar et al.
Этот?
нужно только хорошо разобраться с правилами и мнемониками.Есть масса других инструментов, которые кроют vim как бык овцу (во всяком случае для моих задач) и при этом не требуют выноса мозга для того, что бы научиться ими пользоваться.
ничего личного, но за 15 лет его можно было освоить по самое нихочу ;)
и да, хороший инструмент тем и отличается, что его нужно изучать.
и да, хороший инструмент тем и отличается, что его нужно изучать.
ничего личного, но за 15 лет его можно было освоить по самое нихочу ;)Я написал: «я vi пользую и, вобщем, не испытываю дискомфорта». Ничего личного, но на курсы внимательного чтения вам сходить явно стоит :)
и да, хороший инструмент тем и отличается, что его нужно изучать.Сколько волка не корми, а у слона все равно толще. Так и тут — как vim не изучай, но для моих задач ему не тягаться с другими инструментами.
никто из молодежи совершенно не пострадает от отсутствия знаний об этом «классическом» инструменте.
Ну почему же :) Я знаю случай, когда незнание vi стоило человеку должности.
Он запустил vi на локальной консоли FreeBSD и не мог из него (редактора) выйти :) Переключится в другую виртуальную консоль и убить оттуда процесс он не додумался (или не знал о такой возможности). В результате, дабы скрыть следы преступления, он решил перезагрузить сервер кнопочкой reset …
Так что vi знать нужно. Но вполне можно ограничиться знанием команды «:q!» :)
* Чтобы выйти из vi, нужно нажать «ESC (можно использовать Ctrl+[ или Ctrl+C) :q!». Все изменения будут утеряны. Или ESC и ZQ если не нужно сохранять или ZZ если нужно. Либо вообще в другой консоли набрать «kill −9 `ps -ef | awk '/vi/ {print $2}'`»
* Это единственное, что нормальному человеку вообще стóит знать о vi.
Vim реально удобный.
Вовсе он не сложный и научиться не долго — есть такая отличная штука для обучения как
vimtutor, поставляется вместе с вимом.
Честно говоря сложно представить задачу по работе с текстом которую нельзя было бы легко выполнить при помощи vim'a.
Связки gcc, vim, make, openocd вполне достаточно для полноценной разработки ПО под армы и другие МК, ИМХО.
А все эти IDE от лукавого :)
Вовсе он не сложный и научиться не долго — есть такая отличная штука для обучения как
vimtutor, поставляется вместе с вимом.
Честно говоря сложно представить задачу по работе с текстом которую нельзя было бы легко выполнить при помощи vim'a.
Связки gcc, vim, make, openocd вполне достаточно для полноценной разработки ПО под армы и другие МК, ИМХО.
А все эти IDE от лукавого :)
А все эти IDE от лукавого :)Да-да, давайте писать софт так, как писали 20-30-50 лет назад. Вот это было труЪ, верно? :)
Что за предубеждение такое, что vim что-то неудобное древнее и т.д.
Причем тут «труЪ»? Мне удобно, вас использовать не заставляю.
Причем тут «труЪ»? Мне удобно, вас использовать не заставляю.
Связки gcc, vim, make, openocd вполне достаточно для полноценной разработки ПОСогласен. Для разработки под AVR я вполне использовал gedit и компилятор gavrasm. Без отладок и всего прочего. Даже ошибки искал по номерам строк. По 4 кб «нетто» кода — легко.
А спорим, что без компилятора даже обойдусь, прямо в hex-файл забью код мигалки?
Я ничего против vim не имею. Знаю его достаточно, чтобы свободно редактировать текст, не более. Но это не значит, что поковырять что-то новое и неизвестное для себя (cmake например, gdb и прочее, с чем не сталкивался) есть пустая трата времени.
ploop,
Ковырять, что-то, новое и незивестное это, по-моему, точно не есть пустая трата времени.
Тем мне и нравится мир СПО что все можно пощупать, попробовать по-разному, подобрать удобный для себя инструмент.
Решить можно любую задачу, а не ограничиваться тем что заложили разработчики IDE и других подобных программ-комбайнов.
У меня вот есть желание освоить cmake, да что-то все руки не доходят. Makefile'ы пишу вручную.
Ковырять, что-то, новое и незивестное это, по-моему, точно не есть пустая трата времени.
Тем мне и нравится мир СПО что все можно пощупать, попробовать по-разному, подобрать удобный для себя инструмент.
Решить можно любую задачу, а не ограничиваться тем что заложили разработчики IDE и других подобных программ-комбайнов.
У меня вот есть желание освоить cmake, да что-то все руки не доходят. Makefile'ы пишу вручную.
Vim реально удобный.
А чем он удобный, какие преимущества? Я не тролю, мне действительно интересно услышать вше мнение. Я, честно говоря, абсолютно не вижу этого удобства.
Вовсе он не сложный и научиться не долго — есть такая отличная штука для обучения как vimtutor, поставляется вместе с вимом.
ИМХО, сомнительный довод в пользу vim, если «научится не долго» и для обучения создали специальную программу.
А чем он удобный, какие преимущества?
Тем, что редактор, а не блокнот с единственным режимом вставки текста. То есть своими командными режимами. Но это не всем нравиться, так же как и gui vs. cli.
Извините, но это не ответ. Это абстрактные размышления о преимуществе одного подхода над другим.
Мне интересно (действительно интересно, не тролинга ради) услышать конкретные доводы: этот редактор позволяет сделать {название фичи}, а этот нет. Или: в этом редакторе “A” сделать {название функции} проще и быстрее чем в «B».
Мне интересно (действительно интересно, не тролинга ради) услышать конкретные доводы: этот редактор позволяет сделать {название фичи}, а этот нет. Или: в этом редакторе “A” сделать {название функции} проще и быстрее чем в «B».
Не знаю у кого преимущество, мне просто удобнее нажать / для поиска чем ходить по меню, :w newname чтобы сохранить в другой файл и т.д.
Из «фич» пользуюсь только метками, макросами, быстрыми переходами на строки, скобки, отдельные символы, все не вспомнишь. Про плагины и такие обычные возможности как спеллчек не говорю, здесь наверно все почти как у всех.
При работе с огромной горой кода (больше и запутанней чем ведро) есть недостатки, но они не так сильны, чтобы отказаться от vim. Если речь идет о C/C++, с другими особо не работал.
Из «фич» пользуюсь только метками, макросами, быстрыми переходами на строки, скобки, отдельные символы, все не вспомнишь. Про плагины и такие обычные возможности как спеллчек не говорю, здесь наверно все почти как у всех.
При работе с огромной горой кода (больше и запутанней чем ведро) есть недостатки, но они не так сильны, чтобы отказаться от vim. Если речь идет о C/C++, с другими особо не работал.
Достаточно один раз попользоваться нормальной навигацией по коду, что бы больше никогда не хотеть работать с кодом в обычном (пусть и навернутом) редакторе. А нормальная навигация невозможна без достаточно глубокого парсинга кода. С плюсами и С ситуация еще тяжелее, поскольку, помимо и так не сильно простого синтаксиса, есть еще препроцессор и код (помимо прочих граблей) может разворачиваться сильно по разном, в зависимости от активных дефайнов. Замечу, что навигация это только одна из фич нормальных IDE. Помимо нее есть еще рефакторинг, который требует еще более глубокого парсинга и знаний о языке, с которым идет работа, куда бОльших, чем может обеспечить самый навороченный редактор с плагинами. Так что подобные холивары типа «vim vs everything else» ничуть не напоминают gui vs cli. Речь уже идет не о стиле работы, а о том, насколько инструмент в состоянии помочь разработчику.
P.S. предваряя возможные возражения IDE-хейтеров добавлю — нормальная IDE совершенно спокойно сосуществует со средствами автоматизации сборки типа make, maven, etc.
P.S. предваряя возможные возражения IDE-хейтеров добавлю — нормальная IDE совершенно спокойно сосуществует со средствами автоматизации сборки типа make, maven, etc.
Связки gcc, vim, make, openocd вполне достаточно для полноценной разработки ПО
Если Вы сидите на хосте с отладчиком по ssh. Или если у Вам религия не позволяет поставить оконный менеджер. Или если у Вас нет мыши. Или если у Вас болезнь, при которой не воспринимается информация в графическом виде. В остальных случаях есть более приятные альтернативы описанной связке со значительно меньшим порогом вхождения.
Как только в IDE по правой кнопке мыши на имени функции будет пункт Find All References — я тут же ею воспользуюсь (про eclipse писать не надо и VS тоже)
Как только в IDE по правой кнопке мыши на имени функции будет пункт Find All References — я тут же ею воспользуюсь (про eclipse писать не надо и VS тоже)А почему об эклипсе писать не надо? Потому, что в нем это есть?
Чем устраивать холиворы, лучше бы кто-нибудь рассказал, как к кейлу прикрутить другой текстовый редактор.
Например, чтобы текст можно было редактировать в саблайме, там же чтобы была кнопочка или команда — компилировать и отладить. А уж по нажатию кнопочки фокус ввода переключался бы в сам кейл. Или чтобы внутри кейла был другой редактор…
Да еще и под винду :)
Например, чтобы текст можно было редактировать в саблайме, там же чтобы была кнопочка или команда — компилировать и отладить. А уж по нажатию кнопочки фокус ввода переключался бы в сам кейл. Или чтобы внутри кейла был другой редактор…
Да еще и под винду :)
Пипл, а можно настроить контекстный поиск? Например ткнул в функцию, а в меню пунктик есть «перейти к определению».
Есть. Только не ткнул, а выделил. Перейти к определению (тут он нашарит хидер) или к применению. Не найдет в открытом исходнике — вежливо спросит, а не пошарить ли по всему проекту. После разрешения откроет исходник, в котором объявлена функция и ее найдет.
В общем, лично я доволен. Удобных фишек, присущих современным нормальным средам, полно.
В общем, лично я доволен. Удобных фишек, присущих современным нормальным средам, полно.
у меня вываливает кучу ошибок на CMSIS'овские файлы типа
не было у вас такого?
Инклюды такие
lib/CMSIS/Core/CM3/system_stm32f10x.h:52,14 - Error - reference to 'uint32_t' is ambiguous
не было у вас такого?
Инклюды такие
"-IC:\\Program Files (x86)\\CodeSourcery\\Sourcery G++ Lite\\arm-none-eabi\\include",
"-I${folder:${project_path:stm32_cpp_test.sublime-project}}/lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/",
"-I${folder:${project_path:stm32_cpp_test.sublime-project}}/lib/CMSIS/CM3/CoreSupport/",
"-I${folder:${project_path:stm32_cpp_test.sublime-project}}/lib/CMSIS/Core/CM3/",
"-I${folder:${project_path:stm32_cpp_test.sublime-project}}/lib/spd/inc/",
"-I${folder:${project_path:stm32_cpp_test.sublime-project}}/",
- marvin_yorke
- 02 декабря 2012, 00:19
- ↓
А не могли бы добрые люди показать конфиги для WinAVR-20100110? Не могу понять ход мыслей плагина и как ему правильно задать все координаты, явки и пароли. Нужно под WinXP. Вываливаются кучи ошибок парсинга, начиная с элементарного: Error — unknown type name 'uint8_t'.
И ещё, когда задал в «build_systems» команды сборки, то откуда их вызывать-то?
И ещё, когда задал в «build_systems» команды сборки, то откуда их вызывать-то?
Сам себе отвечу:
Это помогает избавиться почти от всего, кроме парсинга ассемблера: "Error — invalid output constraint '=w' in asm"
Эта ошибка на стандартный заголовочник: C:\WinAVR-20100110\avr\include\util\delay_basic.h
Тут я уже сдаюсь. Ну и какой стандарт C++ указать тоже не очень ясно, если пишешь на avr-gcc с плюсами.
"sublimeclang_options":
[
"-std=c++11",
"-Wall",
"-Wno-attributes",
"-Wno-#warnings",
"-Wno-invalid-source-encoding",
"-IC:\\WinAVR-20100110\\avr\\include",
"-IC:\\WinAVR-20100110\\avr\\include\\util",
"-IC:\\WinAVR-20100110\\avr\\include\\compat",
"-IC:\\WinAVR-20100110\\avr\\include\\avr",
"-D__GNUC__",
"-D_GCC_LIMITS_H_",
"-I${folder:${project_path:Tetris.sublime-project}}/"
]
Это помогает избавиться почти от всего, кроме парсинга ассемблера: "Error — invalid output constraint '=w' in asm"
Эта ошибка на стандартный заголовочник: C:\WinAVR-20100110\avr\include\util\delay_basic.h
Тут я уже сдаюсь. Ну и какой стандарт C++ указать тоже не очень ясно, если пишешь на avr-gcc с плюсами.
Хм, странно, не могу воспроизвести Вашу проблему.
А вы точно используете WinAVR-20100110. Дело в том, что в данной сборке поставляется GCC 4.3.3
Он не знает о стандарте c++11, максимум c++0х. По идее, с такими ключами как у Вас код не должен собираться на данной сборке:
А вы точно используете WinAVR-20100110. Дело в том, что в данной сборке поставляется GCC 4.3.3
C:\Utils\WinAVR-20100110\bin>avr-gcc.exe --version
avr-gcc.exe (WinAVR 20100110) 4.3.3
Он не знает о стандарте c++11, максимум c++0х. По идее, с такими ключами как у Вас код не должен собираться на данной сборке:
C:\Utils\WinAVR-20100110\bin>avr-gcc.exe -c -IC:\Utils\WinAVR-20100110\avr\include\util\ -Wall -std=c++11 test.cpp
cc1plus.exe: error: unrecognized command line option "-std=c++11"
ИМХО, ели у Вас компилятор не ругается на ключ -std=c++11, то есть подозрение, что среда вызывает какой-то другой GCC компилятор, и этим объясняется ошибка в ассемблерной вставке.
Например, похожая ошибка вылазит, если попробовать скомпилировать AVR-овский код компилятором для ARM от CodeBench:
C:\Utils\CodeBench\bin>arm-none-eabi-gcc.exe -c -IC:\Utils\WinAVR-20100110\avr\include\util\ -Wall -std=c++11 test.cpp
In file included from test.cpp:1:0:
C:\Utils\WinAVR-20100110\avr\include\util/delay_basic.h: In function 'int main(int, char**)':
C:\Utils\WinAVR-20100110\avr\include\util/delay_basic.h:110:3: error: inconsistent operand constraints in an 'asm'
По моему, это ключи не GCC, а Clang. uni интересует, какие выбрать ключи, чтобы разбор клангом был предельно близок к разбору GCC, т.к. компилировать будет именно GCC, а разбор клангом нужен для работы кодонавигации и иже с ней.
Хм, возможно, я торможу (тяжелый выдался день). Но почему Вы думаете, что речь одет о Clang? Вроде изначально говорилось о GCC: «показать конфиги для WinAVR-20100110»…
В общем и целом, тут нужно разделять парсер и компилятор, как было правильно замечено. Парсер используется для навигации по коду, ну а компилятор собирает проект. Соответственно, сборка проекта прописана в Makefile и имеет малое отношение к самому редактору.
Вот сам проект: mysvn.ru/avr/examples/Tetris/
Достаёте его такой командой:
Сборку делаете такой:
Для сборки я использую такое описание секции настроек в Sublime Text 2:
Это появляется в Tools, но как это использовать я не понял. Как видно, я использую полные пути. Возможности плагина по парсингу не плохие, но ему, конечно, ещё далеко ещё до MSVS20xx, которые понимают проект в целом, а не частями. Например, там есть подсветка для веток препроцессора, а иерархия заголовочнных файлов воспринимается в целом и не нужно явно указывать откуда какие определения взяты, как для компилятора.
Так вот, иногда лень грузить студию, ибо она очень тяжела нынче стала, а хочется слегка что-то изменить, но чтобы это было более-менее осмысленно и цивилизовано. Notepad++ я освоил для этих целей, работает хорошо, а вот как даже сборку делать в ST2 я пока не понял. Нажимаю Ctrl+B и нулевой результат. Где-то туплю.
Вот сам проект: mysvn.ru/avr/examples/Tetris/
Достаёте его такой командой:
svn export -r20 https://mysvn.ru/avr/examples/Tetris/
Сборку делаете такой:
C:\WinAVR-20100110\utils\bin\make.exe build all
Для сборки я использую такое описание секции настроек в Sublime Text 2:
"build_systems":
[
{
"name": "AVR build",
"cmd": ["C:\\WinAVR-20100110\\utils\\bin\\make.exe", "build"],
"working_dir": "${project_path}"
},
{
"name": "AVR build all",
"cmd": ["C:\\WinAVR-20100110\\utils\\bin\\make.exe", "build all"],
"working_dir": "${project_path}"
},
{
"name": "AVR clean",
"cmd": ["C:\\WinAVR-20100110\\utils\\bin\\make.exe", "clean"],
"working_dir": "${project_path}"
}
],
Это появляется в Tools, но как это использовать я не понял. Как видно, я использую полные пути. Возможности плагина по парсингу не плохие, но ему, конечно, ещё далеко ещё до MSVS20xx, которые понимают проект в целом, а не частями. Например, там есть подсветка для веток препроцессора, а иерархия заголовочнных файлов воспринимается в целом и не нужно явно указывать откуда какие определения взяты, как для компилятора.
Так вот, иногда лень грузить студию, ибо она очень тяжела нынче стала, а хочется слегка что-то изменить, но чтобы это было более-менее осмысленно и цивилизовано. Notepad++ я освоил для этих целей, работает хорошо, а вот как даже сборку делать в ST2 я пока не понял. Нажимаю Ctrl+B и нулевой результат. Где-то туплю.
Да, я уже понял, что стромзил и речь шла о Clang.
Подозреваю, что в случае с Clang не получится корректно парсить инлайн асм вставки для AVR. Операнд «w», на который ругается Clang – это специфический операнд для AVR GCC (w — Special upper register pairs r24, r26, r28, r30). Clang (и версии GCC, не заточенные под AVR) о данном операнде ничего не знает.
Подозреваю, что в случае с Clang не получится корректно парсить инлайн асм вставки для AVR. Операнд «w», на который ругается Clang – это специфический операнд для AVR GCC (w — Special upper register pairs r24, r26, r28, r30). Clang (и версии GCC, не заточенные под AVR) о данном операнде ничего не знает.
Оставлю послание для тех, кто захочет прикрутить SublimeClang к ST3 уже в 2015 году.
SublimeClang, к сожалению, уже давно заброшен и через менеджер пакетов его не поставить. Поэтому делаем следующее:
1.Грузим содержимое репозитория Clang в папку, куда ставятся пакеты ST3.
— git clone --recursive github.com/quarnster/SublimeClang SublimeClang
— cd SublimeClang
— git pull && git submodule foreach --recursive git pull origin master
2. Грузим уже собранный пакет SublimeClang-1.0.41.sublime-package.
Переименовываем его в SublimeClang-1.0.41.zip, и вытаскиваем оттуда libclang.dll and libcache.dll или их 64 битные версии.
3.Копируем dll файлы в «SublimeClang\internals». Все должно заработать.
На win7 что 32, что 64 заработало сразу, а на win 8.1 не взлетело =( Для этого походу уже dll придется пересобирать. Вытащил libclang.dll из бинарников Clang for Windows (64bit) — навигация заработала, автодополнение нет.
Согласно этой инструкции пытался пересобрать dll. libclang.dll вроде скомпилился, а вторую dll не получается скомпилить (MSVS 12 использовал).
SublimeClang, к сожалению, уже давно заброшен и через менеджер пакетов его не поставить. Поэтому делаем следующее:
1.Грузим содержимое репозитория Clang в папку, куда ставятся пакеты ST3.
— git clone --recursive github.com/quarnster/SublimeClang SublimeClang
— cd SublimeClang
— git pull && git submodule foreach --recursive git pull origin master
2. Грузим уже собранный пакет SublimeClang-1.0.41.sublime-package.
Переименовываем его в SublimeClang-1.0.41.zip, и вытаскиваем оттуда libclang.dll and libcache.dll или их 64 битные версии.
3.Копируем dll файлы в «SublimeClang\internals». Все должно заработать.
На win7 что 32, что 64 заработало сразу, а на win 8.1 не взлетело =( Для этого походу уже dll придется пересобирать. Вытащил libclang.dll из бинарников Clang for Windows (64bit) — навигация заработала, автодополнение нет.
Согласно этой инструкции пытался пересобрать dll. libclang.dll вроде скомпилился, а вторую dll не получается скомпилить (MSVS 12 использовал).
Комментарии (128)
RSS свернуть / развернуть