как запустить код в clion
Настройка IDE Clion и Cmake для работы с STM32 и C++
Перед примером моей настройки немного лирики.
Давно хотел попробовать себя в микроконтроллерах, вернее были идеи с их использованием, которые очень хотелось реализовать. Сначала начал с PIC32 — огонь контроллеры. Так получалось, что поначалу и коротил их порты, и с питанием завышал — неубиваемые (не совсем конечно, порт правда однажды сгорел, но сам контроллер продолжал работу). IDE MplabX неплоха, подкупал графический блок с отображением занимаемой RAM/Flash на выбранном МК — удобно, но сам NetBeans как IDE это жесть, ну не удобно ни разу после Idea. Но проблема была не в этом — как потом оказалось, PIC’и тяжело достать, мало кто их возит, а если и возит, то по относительно высокой цене.
Дальше решил копнуть в сторону STM32 — они в больших количествах, за базовую периферию просят не много, но главное — это доставаемость. (Но кодогенератор STM’а хуже Microchip’a — весь файл загажен комментами и функциями, это конечно сильно огорчило. У Microchip’а все сгенеренные функции вынесены в отдельные файлы и main.c практически чист — прелесть).
(UPD: вот тут признаюсь ошибался, спасибо golf2109, он подсказал, что от заваливания комментами и функциями файла main.c можно избавиться, достаточно включить в настройках опцию для вынесения сгенерированного кода в отдельные файлы, но я все же в недоумении, почему это не дефолтная настройка, вроде логично было бы)
Теперь об IDE для STM32.
Попробовал хваленый Keil — конечно получше блокнота, но ужасно не удобный (ни нормальных подсказок, ни нормального форматирования, после Idea в общем не то пальто, особенно я так и не понял как создавать пакеты, почему нельзя просто в окошке ткнуть создать пакет и продолжить — матюгаться хочется).
Потом попробовал CooCox — гораздо лучше и приятнее интерфейс, хорошо настраивается форматирование (прям порадовала настройка переноса параметров в методах, да и другие настройки очень кстати), но опять же не хватало многих плюшек от Idea и опять же проблемы с организацией пакетов.
Еще из изменений — дебаггер, упомянутый в блоге, переименовали в Ozone, его еще не тестил, позже отпишусь.
И последняя проблема, сверлившая мозг. Очень хотелось ООП, но не компилился проект если я добавлял C++ файл, куча ошибок с не найденными функциями (например, _exit, _sbrk и пр.). Здесь проблем было 2:
Работать стало приятно, но пока заливаю прошивку через STM’овскую утилиту, позже попробую накрутить OZONE. На вопросы отвечу (если смогу).
Как настроить Clion для компиляции и запуска
Я просто скачать Clion от https://www.jetbrains.com/ потому что я просто обожаю всю их продукцию.
однако у меня возникли проблемы с его правильной конфигурацией, отбросьте тот факт, что я пытаюсь, я не могу скомпилировать и запустить свое приложение (простой hello world one )
когда я пытаюсь запустить приложение, оно ссылается на «Редактировать конфигурацию», поэтому я добавил новое приложение и теперь проблема.
конфигурация Rest, похоже, не требуется.
Мой CMakeList.тхт выглядит так:
Я пытаюсь выполнить это с «все цели», а также попытаться setupt выполнимый. Все, но я не могу заставить его работать.
здесь кто-нибудь, у кого были эти проблемы раньше и может посоветовать? Спасибо
3 ответов
я столкнулся с такой же проблемой с CLion 1.2.1 (на момент написания этого ответа) после обновления Windows 10. Он работал нормально, прежде чем я обновил свою ОС. Моя ОС установлена на диске C:\, а CLion 1.2.1 и Cygwin (64-бит) установлены на диске D:\.
проблема, похоже, связана с CMake. Я использую Cygwin. Ниже приведен краткий ответ с шагами, которые я использовал для устранения проблемы.
КОРОТКИЙ ОТВЕТ: (должно быть похоже на MinGW тоже, но я не пробовал это):
ОТВЕТ:
Ниже приведены подробные шаги, которые решили эту проблему для меня:
удалить / удалить предыдущую версию Cygwin (MinGW в вашем дело)
убедитесь, что CLion обновлен
запустите Cygwin setup (x64 для моей 64-разрядной ОС)
установите по крайней мере следующие пакеты для Cygwin: gcc g++ make Cmake gdb Убедитесь, что вы устанавливаете правильные версии вышеуказанных пакетов, которые требуются CLion. Вы можете найти необходимые номера версий в разделе быстрого запуска CLion (я не могу опубликовать более 2 ссылок, пока у меня не будет больше репутации точки.)
затем вам нужно добавить Cygwin (или MinGW) в переменную среды Windows с именем ‘Path’. Вы можете Google, как найти переменные среды для вашей версии Windows
добавить папка » bin » для переменной Path. Для Cygwin я добавил: D:\cygwin64\bin
выберите ‘Сборка, Выполнение, Развертывание’ а затем нажмите на кнопку ‘Toolchains’
код ‘среда’ должен показывать правильный путь в каталог установки Cygwin (или MinGW)
на ‘CMake исполняемый файл’ выберите ‘используйте комплект CMake x.X. x’ (3.3.2 в моем случае на момент написания этого ответа)
‘Debugger’ показали мне говорит ‘Cygwin GDB GNU gdb (GDB) 7.8’ [слишком много gdb в этой строке ;-)]
ниже есть галочка для всех категорий и также должен отображаться правильный путь к ‘make’, ‘C compiler’ и ‘компилятор C++’
создайте свой проект, а затем запустите проект. Вы должны увидеть в окне терминала
надеюсь, что это помогает! Удачи и наслаждайтесь CLion.
Я встретил некоторые проблемы в Clion и, наконец, я решил их. Вот некоторый опыт.
вы также можете использовать компилятор Microsoft Visual Studio вместо Cygwin или MinGW в среде Windows в качестве компилятора для CLion.
просто перейдите, чтобы найти действия в справке и введите «реестр» без » и включите CLion.включить.индекса MSVC Теперь настройте toolchain с помощью компилятора Microsoft Visual Studio. (Вам нужно скачать его, если он еще не загружен)
JetBrains CLion для микроконтроллеров
CLion — это среда для разработки на С/С++, близкий родственник IntelliJ IDEA и, соответственно, Android Studio.
Я представляю вниманию сообщества перевод моего блог поста, в котором по шагам описано, как использовать эту IDE для написания прошивок микроконтроллеров.
Примерно полтора года назад я написал блог-пост по английски, в котором рассказал, как можно использовать JetBrains CLion для программирования микроконтроллеров.
Если кратко, в тот раз я использовал одну из плат серии STM32-Discovery. Набортный программатор был перешит в совместимый с SEGGER JLink. Также был использован генератор кода STM32CubeMX, тулчейн GCC ARM и отладчик SEGGER Ozone. При помощи всего этого удалось поморгать светодиодиком :).
Такой набор инструментов в целом работал, но требовал перешивки программатора, запуска внешнего отладчика (зачем он нам, если есть замечательный CLion?), кроме того, SEGGER накладывает довольно жесткие лицензионные ограничения на такие перепрошитые программаторы.
Естественно, все эти проблемы меня не радовали, и я пытался найти решение получше. К счастью, прогресс не стоит на месте, и за прошедшее время и CLion, и CubeMX были существенно улучшены, и самое главное, CLion теперь поддерживает Remote GDB. Теперь стало реально использовать OpenOCD (Open On-Chip-Debugger) как ПО для заливки и отладки прошивок микроконтроллеров. Таким образом можно избавиться от ограничений лицензии SEGGER в пользу инструментов с открытым исходным кодом. Более не требуются никакие перепрошивки программаторов, демо-платы можно использовать прямо так, даже для прошивки целевых устройств (см. документацию на платы ST Nucleo или Discovery).
Мне удавалось запустить это все на ванильном CLion, но настройка проектов была настолько сложной, что я в конце концов пришел к мысли написать свой собственный плагин, который позволит увязать друг с другом все инструменты сразу. И вот, я довел плагин до бета-версии, опубликовал в репозитории JetBrains, и готов показать, как это все это функционирует. Для примера мы сделаем небольшой демо проект (сюрприз! Мы будем мигать светодиодами!), используя одну из самых популярных плат от ST Microelectronics – STM32F4-Discovery. Тот же самый пример, с небольшими изменениями, может быть запущен на любой плате из серий STM32 Nucleo, Discovery или EVAL, поскольку светодиоды есть на каждой из них.
Инструментарий
CLion
Прежде всего, нам нужна, собственно, IDE. CLion доступен для загрузки на сайте JetBrains. Просто запустите инсталлятор и следуйте инструкциям. Вам понадобится лицензия, но месячного триала должно хватить на первое время. Инструкция по установке тут.
Плагин
Откройте настройки CLion, вкладку Plugins, нажмите Browse Repositories… и найдите плагин по ключевому слову openocd. Далее Install и рестарт CLion.
Теперь в CLion появился еще один Run Configuration, два дополнительных пункта в меню Tools еще одна вкладка в настройках.
Тулчейн
Тулчейн (toolchain) – это кросс-платформенный набор инструментов для сборки программ и прошивок. Кросс-платформенный – это значит, что компиляция происходит на PC или Mac, а результат сборки будет работать только на целевом устройстве. В нашем случае это ARM-совместимый МК.
Существует несколько разных тулчейнов, таких как свободные и поддерживаемые CLion’ом Clang или GCC, а так же несколько коммерческих (Keil, IAR, Raisonance, etc). Я использую GCC, скачанный из официального источника – https://developer.arm.com/open-source/gnu-toolchain/gnu-rm. Обратите внимание, после установки тулчейн должен включен в system path. Проверить это можно, запустив arm-none-eabi-gcc из командной строки.
OpenOCD
OpenOCD – это отладчик, поддерживающий аппаратную отладку различных МК с помощью одного из множества поддерживаемых программаторов. Также он может прошивать FPGA и flash-память. Таким образом, потенциально можно работать с огромным количеством разных чипов, не ограничиваясь продукцией ST.
Из всех возможностей OpenOCD плагин использует три:
поддержка прошивальщика ST-Link/V2
Поддержку МК с ядром ARM Cortex M
Поддержку протокола Remote GDB
OpenOCD официально распространяется в виде исходников, но существуют также полуофициальные сборки под все популярные платформы. Более подробно смотрите тут: http://openocd.org/getting-openocd/. Под Windows еще нужен драйвер для ST-LINK/V2. Драйвер обычно идет в сборке OpenOCD для Windows, но можно его скачать и напрямую, с сайта ST, вместе с весьма удобной утилитой для прошивки МК, вот отсюда: http://www.st.com/en/development-tools/stsw-link004.html.
STM32CubeMX
Приступим
Одна из самых популярных плат для STмовских МК – STM32F4-Discovery. Ее и возьмем для нашего примера. На борту довольно мощный (хотя и не топовый) МК – STM32F407, прошиватель, совместимый с ST-LINK/V2, и 4 управляемых светодиода. Там еще микрофон, звуковой выход, акселерометр, USB, но в этой статье мы не будем углубляться в них – займемся только светодиодами. Если у вас уже есть какая-нибудь другая плата из серий STM32 Discovery, Eval или Nucleo, то это не беда, вы можете сделать все тоже самое на любой из них, т.к. там есть как минимум один светодиод.
Настройка платы
После установки всех инструментов давайте, наконец, напишем «улучшенную мигалку» для нашей STM32F4-Discovery. Перво-наперво, запускаем CubeMX. При старте он загружает список доступных МК и плат из сети, и после этого можно выбрать любой из МК. Естественно, мы больше заинтересованы в платах. Переходим в “Board Selector”, находим и дважды кликаем STM32F4DISCOVERY.
После этого откроется редактор, в котором показан собственно чип МК, и можно настроить режимы пинов, любую периферию и схему тактирования процессора, пользуясь тремя вкладками. На последней, четвертой, вкладке ничего настроить нельзя, но можно рассчитать энергопотребление чипа в зависимости от конфигурации.
Поскольку мы начали не с «голого» МК, а с платы, то кое-что уже сделано для нас. В частности, настроены нужные нам GPIO для светодиодов, им даже присвоены имена LD3. LD6. Нам только требуется донастроить сам проект и сгенерировать код. Нужно выбрать папку проектов, имя собственно проекта и задать SW4STM32 в качестве Toolchain/IDE.
Теперь нужно закрыть настройки и нажать Generate Code, т.е. кнопку с шестеренкой. Когда генерация кода закончена, просто закройте финальный диалог (т.е. не надо трогать кнопку «Open Project»).
Настройка параметров плагина.
Снова откройте настройки CLion, на этот раз вкладку OpenOCD Support в группе Build, Execution, Deployment.
Там необходимо указать папку, где находится OpenOCD и файл конфигурации для платы. Плагин пытается найти OpenOCD в system path сам, но иногда нужно явно прописать точное местонахождение. В большинстве случаев настройки портов и путь к GDB вам менять не надо, однако пользователям Mac все-таки нужен другой gdb. Например, можно взять arm-none-eabi-gdb из тулчейна.
Самое последнее, что нужно сделать – выбрать файл конфигурации платы (Board Config File) с помощью соответствующего диалога. Эти файлы находятся в подпапке boards инсталляции OpenOCD. Для данного проекта наилучшим выбором является, очевидно, stm32f4discovery.cfg.
А теперь добавим кода
Вот теперь мы все необходимые настройки сделаны, можно писать код. Открываем main.c, находим бесконечный цикл while и добавляем туда несколько строк, см. строки 106-111:
Эти строки зажигают случайную комбинацию светодиодов каждые 300 мсек.
Также можно добавить несколько директив #pragma (строки 100, 101 и 113) чтобы избавиться от предупреждений CLion – бесконечные циклы не используются в «нормальных» программах на C и, поэтому, они не нравятся нашей IDE.
Ключ на старт!
Настал момент поставить breakpoint где-нибудь внутри тела main() и запустить это все! CLion соберет проект, загрузит в нашу плату, запустит отладчик и сбросит МК. Теперь можно пользоваться breakpoints и watches для отладки.
Лучше один раз увидеть, чем три раза прочесть:
Что дальше?
Если уважаемому читателю удалось проделать все вышеописанное, то простенький пример прошивки работает. Но как писать код далее? Окей, вот несколько советов в форме вопрос-ответ.
Q: Какие платы поддерживаются?
A: Более-менее любые демо платы STMicroelectronics серий STM32 Discovery, Nucleo или EVAL должны работать.
Q: Что делать, если мне надо поменять аппаратную конфигурацию МК?
A: Запустите STM32CubeMX снова и откройте ваш проект, сделайте необходимые изменения и перегрерируйте код. Плагин в IDE спросит, не надо ли обновить проект. Просто ответьте «Yes».
Q: Мне нужно добавить внешнюю библиотеку, подключить FPU, сделать еще какие-то изменения в CMakeLists.txt. Но как?
A: CMakeLists.txt автоматически перезаписывается плагином из шаблона, напрямую там лучше ничего не менять. Сам шаблон автоматически записывается среди файлов проекта, следует сделать изменения там, после чего обновить проект, используя пункт меню Tools->Update CMake project with STM32CubeMX.
Q: Я хочу использовать CLion и плагин для моих разработок, но не для ARM. Это возможно?
A: Ну, если ваш МК поддерживается GCC, прошиватель совместим с OpenOCD, то как минимум можно попробовать. Возьмите подходящий тулчейн и см. предыдущий ответ.
Q: Я не могу подобрать подходящий файл конфигурации платы. Я могу использовать несколько отдельных файлов конфигурации?
A: Можно написать свой файл конфигурации платы, скомбинировав их. Положите его в свой проект, а за образец возьмите один из стандартных.
Q: А мне нравится! Могу я как-нибудь поддержать проект или поучаствовать в нем?
A: Конечно!
10 советов для продуктивности в CLion, кроссплатформенной С/С++ IDE
До выпуска нашей первой группы курса «Разработчик C++» остались считанные дни. По итогам неплохо поработали напильником и надфилем над курсом: перекомпоновали домашние задания, обновили версию язык и ещё разное по мелочи. Ну, а пока продолжаем нашу традицию по интересным и полезным материалам.
Судя по собственному опыту разработки, многие разработчики C/C++ пренебрегают идеей, что IDE может сделать их работу продуктивней. Ведь что может быть лучше, чем простые и быстрые Vim или Emac. Что ж, позвольте продемонстрировать. Эти 10 советов CLion поднимут вас на новый уровень продуктивности, помогут сфокусироваться на важных и сложных задачах, в то время как IDE решит за вас рутинные задачи.
Прежде чем начать, познакомимся с CLion, новой кроссплатформенной IDE для разработки на C и C++, созданной JetBrains. Она изначально поддерживает C и C++, включая стандарт C++11 (с некоторыми небольшими ограничениями), libc++ и Boost. Она корректно обрабатывает макросы и шаблоны, а также работает с GCC или Clang (при работе с Windows понадобится или MinGW/MinGW-w64, или Cygwin), GDB, как встроенный дебаггер, и CMake, как система сборки и проектная модель. В дополнении к C/C++ также можно пользоваться JavaScript, XML, HTML и CSS на том же уровне редактирования кода, используя, например, подсветку синтаксиса, анализ, автодополнение, навигацию и рефакторинг.
1. Умное автодополнение знает, что вам нужно
В первую очередь, нам всем нужен редактор. Автодополнение кода крайне важно: мы просто начинаем вводить символ (переменная, функция, тип, имя класса) и редактор показывает нам список подходящих предложений. Это просто, но действительно ли нам нужны все те опции, описанные в примере ниже?
Ах да, а если найден только один возможный вариант, он будет мгновенно использован!
2. Используйте сразу, определяйте позднее
Когда появляется гениальная идея, не хочется тратить время на скучные рутинные задачи. Предположим, вы использовали функцию, которая до сих пор не была имплементирована или даже определена. CLion выделяет ее красным. Нужно ли сразу задержаться для имплементации функции? Вовсе нет! Попросите CLion сгенерировать заглушку и вернитесь к этому моменту позднее. Просто нажмите Alt+Enter:
Объявление и определение мгновенно появятся в вашем коде:
Работает аналогичным образом для переменных и имен классов:
3. Live template’ы для ваших любимых или наиболее используемых фрагментов кода
Как получить цикл или итерацию по диапазону (в стиле C++11) просто напечатав несколько символов? Введите for и нажмите Tab, чтобы получить цикл; или введите iter или itit, а затем нажмите Tab:
При ближайшем рассмотрении окажется, что в Clion можно создавать пользовательские Live Template’ы или “Surround With” шаблоны (которые быстро заворачивают выбранный код в конструкт). Покажем пример, как быстро получить класс, с наследованием из другого существующего класса:
После добавления нового “cp” шаблона, можно ввести cp в редакторе:
Описание шаблона можно сразу увидеть в выпадающем списке автодополнения. Шаблон расширяется при нажатии Tab. Теперь можно добавить новое название класса, затем выбрать родительский класс и модификатор для него из списка автодополнения:
Вуаля! Новый класс готов.
4. Следуйте иерархическому виду
Разработчики читают код значительно чаще, чем пишут его. Перед тем, как добавить новый код или обновить существующий, проводится глубокое и детальное исследование существующей кодовой базы. (Только если вы не начинаете проект с нуля, что редкость.) Во многих случаях продуктивность зависит от того, как быстро можно пробраться сквозь кодовую базу.
Для таких случаев CLion предоставляет широкий спектр возможностей навигации по коду:
5. Меняйте порядок и добавляйте параметры — IDE позаботится об использовании
Рефакторинг — мощный процесс, который помогает улучшить код, сделать его чище и удобней. Некоторые IDE предлагают ограниченное количество способов его автоматизации. В CLion их очень много — от простых и популярных Rename до сложных Change Signature, Extract Function или Class, Inline и многие другие. Можете положиться на CLion, корректность кода сохранится и при внесении изменений рефакторинга.
Позвольте наглядно проиллюстрировать надежность CLion. Предположим, есть функция:
Чтобы добавить новый параметр в эту функцию, я воспользуюсь рефакторингом Change Signature:
К слову, добавлять новый тип параметра в этом окне очень просто благодоря автодополнению кода. После того, как я нажимаю “Refactor”, Clion обновляет подпись и все использования, заменив значение по умолчанию для данного типа, которое в этом случае равно nullptr:
А что, если я решу упорядочить параметры во время Change Signature? Конечно же, их порядок обновится в соответствии со всеми использованиями:
6. Извлекайте все, с большим количеством опций
Извлечение части кода в отдельную функцию — популярный метод рефакторинга, но что насчет других? Например Extract Typedef, Define, Variable, Parameter или даже Subclass? Опыт их использования в CLion улучшается благодаря небольшим, но полезным деталям. Например, вы можете изменить все вхождения (если их больше одного) при извлечении константы или переменной; объявить константу или параметр статическими; использовать auto тип при извлечении переменной; и так далее и тому подобное:
7. Неиспользуемый код? “=” в условии? Не проблема!
Следуя закону Мерфи для компьютеров, в каждой нетривиальной программе есть хотя бы один баг. Но давайте сделаем все возможное и исправим как можно больше из них. Пока мы стараемся локализовать и, надеюсь, пофиксить баги, CLion постоянно мониторит ваш код на наличие потенциальных ошибок. Любая подозрительная часть кода подчеркивается в редакторе, и предлагаются опции возможных быстрых фиксов. Для их просмотра достаточно нажать Alt+Enter. IDE также проводит полный Data Flow Analysis для выявления неиспользуемого и недоступного кода:
CLion не пропустит и вездесущие ошибки C/C++, например, “=” в условии:
Эта ассистенция работает в то время, как вы печатаете, избавляя от необходимости запускать на проекте дополнительный инструмент для анализа кода.
8. Простая отладка с возможностью смотреть значения переменных прямо в редакторе!
Ключевое преимущество IDE над простым текстовым редактором — опыт дебаггинга. Конечно можно запустить отдельный процесс дебаггинга, но отладка внутри IDE экономит много времени и предоставляет дополнительный полезный функционал.
CLion интегрирует GDB бэкенд, предоставляя все необходимое в интерфейсе и
улучшая опыт отладки некоторыми крайне полезными инструментами. К примеру, каждый раз, когда вы вводите имя переменной для просмотра или выражение для оценки, можно воспользоваться преимуществами автодополнения кода. В отдельном окне инструмента показаны все детали текущего состояния программы. А вот и вишенка на торте: во время отладки IDE показывает значения переменных рядом с их объявлением:
9. Передумали во время отладки? Не перезапускайте — сразу меняйте значения переменных!
Значение отладки заключается в понимании данных и контроле их перемещения в программе. Иногда нужно проверить несколько значений переменной, например, проследить отдельную ветвь выполнения. Не нужно тратить драгоценное время на перезапуск — сразу поменяйте значения в текущей сессии отладки:
Теперь мы можем продолжить ту же самую сессию, но с новым присвоенным значением y, равным 55. Как было замечено ранее, IDE показывает значения переменной рядом с их объявлением в редакторе, подчеркивая примененные изменения:
10. Все необходимые инструменты на борту — Не нужно переключаться!
IDE расшифровывается как Integrated Development Environment (Интегрированная Среда Разработки), ее использование означает, что в работе вам больше не потребуется переключаться между несколькими инструментами, например, отдельным vcs приложением, баг-трекером в браузере или даже терминалом. Весь этот инструментарий уже встроен в CLion IDE, чтобы вы могли сфокусироваться на коде с минимумом отвлечений.
Опробуйте эти советы в CLion и убедитесь, что они помогут вам стать эффективней и продуктивней!
Как всегда ждём вопросы, комментарии тут или заходите на день открытых дверей.