Pull to refresh

Comments 37

А когда понадобится вычислить и отобразить значения, на переменной можно нажать Load
А есть ли возможность сделать mute для всех переменных, кроме одной? Зачастую все же хочется следить за состоянием одной-двух переменных на каждом шаге.
Сейчас мьютятся все, более сложную логику можно сделать теоретически, заведите задачку в трекере. В принципе, на каждом шаге можно пока Load нажимать на этой переменной.
Кстати, я не совсем права, если добавить нужные переменные в Watches — они мьютиться не будут. Так вроде как раз выходит то, что нужно.
Да, то что нужно, спасибо.
Занимаюсь разработкой для встраиваемых систем. Преимущественно ST, TI, NXP, но разрабатываю и отлаживаю всё в eclipse, есть интересный проект (скорее всего команда CLion в курсе) gnu-mcu-eclipse мне кажется у них можно позаимствовать интересные идеи.
Отладчиком пользуюсь часто. И особенно мне нравится возможность просмотра регистров периферии прямо во время отладки.
Есть ли поддержка SVD в CLion? они позволяют просматривать регистры периферии конкретного микроконтроллера прямо во время отладки. SVD — это XML файл с описанием регистров периферии(в JSON было бы удобнее, моё мнение). Было бы здорово иметь возможность дополнять эти файлы более подробным описанием регистров прямо в IDE и скидывать свои дополнения или справления в общий котёл.
Занятно, но мы как раз вчера запланировали поддержать SVD/просмотр регистров периферии в CLion 2019.2)
Скажите пожалуйста, когда примерно ожидать отладчик под msvc? Прочитав план на релиз 2019.1 заглядывал в каждый eap билд)
Он в процессе. Так как он пишется с нуля, на базе LLDB, то это не быстрый процесс. Сейчас есть версия, где работает степпинг + мы научились читать natvis файлы. Но не поддержан еще пока evaluate templates, без этого будет тяжело поддержать STL. Но мы надеемся в EAP на 2019.2 хотя бы какаю-то экспериментальную версию показать широкой публике.
А когда ожидать debugging с MSVC? Очень необходимая вещь, без неё почти невозможно.

скажите, а когда будет, и будет ли, возможность поменять генератор для cmake?

Появится, когда мы поддержим CMake-server (CPP-8238). В 2019.2 вряд ли успеем, к сожалению.
UFO just landed and posted this here
Мы довольно долго исследовали рынок и STM32 выглядит как наиболее подходящая первая цель. Но будем расширять поддержку в дальнейшем и для других семейств микроконтроллеров.
Не знаю, какой Вы исследовали рынок, но в среде профессиональных разработчиков встраиваемых систем «Куб» не в почете. STM32 действительно имеют широкую аудиторию, но надо рассматривать более обширно рынок, например «силовики» используют семейство TMS от TI, разработчики IoT активно используют NRF от Nordic. Многие микроконтроллеры идут с SDK или библиотеками различных стеков (BLE, 6LoWPAN и т.д.) следовательно надо реализовывать поддержку этих дополнений. На многих фирмах используются микроконтроллеры различных семейств и ядер, и на каждый тип микроконтроллеров приходиться ставить свой инструментарий. Для затравки новость интересная, но на сегодня мало кого из аудитории профессиональных разработчиков встраиваемых систем заинтересует пока неполноценный продукт. Вам стоит пообщаться с разработчиками встраиваемых систем напрямую, чтобы выяснить потребности.
Я не говорила, что Cube супер популярен. Я лишь сказала, что STM32 наиболее интересная пока группа. Cube был поддержан у Ильи в плагине и у него есть определенная аудитория, поэтому мы перенесли в продукт. Конечно, это не самый важный инструмент для STM-семейства. OpenOCD поддержка в этом плане более масштабная, по количеству кейсов использования.

С разработчиками встроенных систем мы общаемся. Во-первых, в рамках исследования мы делали большой опрос.

Во-вторых, у нас в команде несколько разработчиков, в прошлом занимавшихся встроенными системами. У всех, конечно, свой опыт, но какую-то интересную выборку дает. Я вот сама проработала в embedded networking, делала всякие IP routers/gateways, IPTV и прочие интеерсные железки. У Elmot опыт скорее любительский, зато диапозон попробованных MCU большой.
опыт скорее любительский, зато диапазон попробованных MCU большой

Поймите, любительский большой диапазон попробованных сильно отличается от большого диапазона используемых профессиональным разработчиком. И потребности соответственно отличаются. Например, NordicEnergy в своей работе использует различный спектр микроконтроллеров и его Ваш продукт пока не сильно заинтересовал.
Мы и не расчитывали, что после добавления OpenOCD поддержки и куба этим заинтересуются большие профессиональные embedded разработчики. Все еще впереди!
Самое главное сделать нормальную поддержку кросс компиляторов, чтобы можно было хотя бы проект сделать с тулчейном под популярные кросс компиляторы типа IAR и GCC… Потому что Cube это хорошо, но им нельзя пользоваться при разработке ПО для промышленных надежных устройств.
А то сейчас вроде и разрабатывать можно и отлаживаться, но при этом половина функций не работает. Основная трабла, компиляторы не проходят проверку при создании Cmake проекта или при его обновлении, обещали вроде в 2019.2 поправить, ждем…
Собственно GCC поддержан. Проверка компиляторов в cmake просто отключается.

Не понимаю ваших проблем с кубом — он просто генерирует код для настройки периферии и клокинга, почему им нельзя пользоваться?

А что(и, главное, кто) Вам обещали в 2019.2, если не секрет?

Что то у меня Gcc подключать не хочет, падает при создании Cmake проекта…
Я беру его отсюда https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
В настройках ставлю MinGw и подсовываю компиляторы со ссылки и получаю ошибку, что компилятор не может справиться с простым тестом при создании. Cmake проекта.
Если подсовывать IAR компилятор, то почти проходит, за исключением компиляции с каким то ключом, который он не знает.
В итоге проект компилитсясвсе таки, но пути к заголовочникам не видит. Вот, например:
[YouTrack, Commented] Issue CPP-12576: include_directories ignored by 'inspection' if compiler check fail
И вот,
[YouTrack, Commented] Issue CPP-12788: Toolchain file break highlighting
И все это под этим:
[YouTrack, Voted] Issue CPP-871: Support for cross-compilation/debug and embedded development


Мне обещали исправление ошибки при создании Cmake проекта и связанных с ней типа проблемы с нахождением путей к include заголовочникам, сейчас приходится прописывать полный путь в исходниках…
А путь к std заголовочникам вообще не знаю как прописать.


Куб генерит код, но этим кодом нельзя пользоваться в реальной жизни, так как у этого кода даже просто много ворнингов от компилятора, не говоря уже про проверку статическим анализатором кода, в генереном коде баги, например в USB (но это то что сам видел и прочувствовал), так то даже в CMSIS есть баги с выравниванием структур… А в кубе и подавно.
Ну и кода там генериться мама не горюй, чтобы светодиодом поморгать… В общем для дома и учеба самое то, а для промышленных применений такой генерый код не пройдет ни одной сертификации..

GCC: Отключите проверку компиляторов
SET(CMAKE_C_COMPILER_WORKS 1)
SET(CMAKE_CXX_COMPILER_WORKS 1)

IAR, конечно, в планах, но не сейчас

Т.е. баги не в самом кубе, а в стандартных библиотеках. Тут я соглашусь, особенно про их ужасный USB.
Тем не менее, даже с необходимостью править косяки в библиотечном коде в целях сертификации, куб очень полезен в начале проекта на сложных чипах(F4, F7, L4, H7, WB), иначе там чтения доки на несколько недель.

А путь к std заголовочникам вообще не знаю как прописать.

По идее само долно найтись, если тулчейн в path.
Ок, спасибо попробую. По поводу IAR, он работает нормально, все компилится, отлаживается, вопрос только в том, что не работает include_directories и-за этого пути не работают… если сделать работу include_directories, то этого вполне хватит…
Насчет Куба, я согласен, что полезен он для быстрого начала, для проверки там идей и так далее, но по хорошему даже метод обращения к регистрам нужно менять в CMSIS. И да доки придется читать. Но без этого никуда, как говориться, лучше день потерять, потом за пять минут долететь :)
Для примера, что в голову пришло…
class RegisterReadOnly 
{ 
};
class RegisterWriteOnly 
{ 
};
class RegisterReadWrite : public RegisterReadOnly, public RegisterWriteOnly 
{ 
};

template <std::size_t size, typename RegisterType, std::uint32_t address,
typename std::enable_if_t<std::is_base_of<writeOnly, RegisterType>::value>>
class Register
{
public:
  using registerType = typename RegisterTraits<size>::internalType;  
  constexpr Register(): reg{*reinterpret_cast<std::uint32_t*>(address)}
  {
  } ;  
  Register& operator=(const registerType& right) 
  {
    reg = right ;
    return *this ;
  }  
  Register& operator |=(const registerType& right)
  {
    reg |= right ;
    return *this ;      
  }  
private:
  volatile registerType & reg;
};

int main()
{
   Register<32U, RegsiterReadWrite, GPIOA_MODER_BASE_ADDR> GpioaModer;
   GpioaModer |= (1 <<3) ;
   Register<32U, RegsiterReadOnly, ADC1_SR_BASE_ADDR> Adc1SR;
   Adc1SR |= 1 ; // ошибка компиляции, так как регистр ReadOnly
}

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

Кроме того, библиотеки на С, а не на плюсах.
И это вряд ли изменится в обозримом будущем.

) Ну да, но за плюсами будущее, библиотеки потихоньку переписываются, а по моей специфике мы пишем все библиотеки сами, так как код сертифицируется на SIL3 и Си там не приветствуется, по сколько совсем не совсем он строго типизированный.
Кстати регистров много, но отличаются они только адресами, типом доступа и размерностью…
Кто то же CMSIS заголовояники для каждого процессора написал ( с ошибками кстати), тут просто дело времени, но ошибок меньше, например можно проверить, что структура выровнена по размеру регистррв и не имеет дырок и все это во время компиляции.

ну блин… а что делать со всякими битбэндами, скажем? не использовать? Так это иногда дает нехилый прирост по скорости.
В целом я все равно за статический анализатор в данном случае.

Забыл сказать, у меня Windows, возможно под Linux таких проблем нет...

Многие микроконтроллеры идут с SDK или библиотеками различных стеков (BLE, 6LoWPAN и т.д.) следовательно надо реализовывать поддержку этих дополнений.

Да, это абсолютно верно. Какую поддержку для этих SDK и библиотек было бы желательно иметь, кроме того, что уже идет из коробки? В CLion уже есть довольно мощный редактор кода, отладчик, memory view. Запланирована поддержка Peripheral Registers View
А мы и не ограничиваемся stm32, куб — это опциональная вещь для быстрого старта. Вы уже сейчас можете использовать CLion для любых микроконтроллеров, которые поддержаны gcc, gdb и openocd. Естественно, поддержку других МК мы тоже будем расширять.

потратить силы на другой инструментарий

Если есть пожелания по конкретным утилитам, то заведите тикет, мы посмотрим, что можно сделать
У Вас в профиле написано «На данный момент не занимаюсь разработкой ПО!». Зачем вообще это все Вам?
Кажется, стоит явно упоминать того, кому задаете вопрос) А то не понятно.
UFO just landed and posted this here
Использую CLion уже больше года — все нравится.
Но пару дней назад переехал на ноутбуке с macos high sierra на ubuntu 19.04.
И начались сильные тормоза из-за CLion. При редактировании проекта использование cpu подскакивает на максимум. При включенном power saving режиме такого нет.
Под макосью таких проблем не наблюдалось. Проекты ровно те же самые редактировались.
Грустно :(
Это все очень странно. Снимите и зашлите CPU snapshot в наш саппорт. Мы посмотрим
Поддержка «Naming Convention» радует, но условный «camelCase» вы почему-то разделили на «PascalCase» и «camelCase», а «snake_case» в варианте с первой заглавной буквой нет.
Да, мы уже осознали, что забыли про Upper_Snake_Case, он появится в ближайшем апдейте 2019.1.1
Sign up to leave a comment.