Проект STM32 HAL на C++

Если вы как я любитель писать на C++ для микроконтроллеров STM32, то наверняка в курсе данной проблемы, а именно то, что при использовании утилиты CubeMX генерируется HAL проект только с поддержкой Си, тогда как HAL в принципе поддерживает C++.

Я использую Atollic TrueSTUDIO в разработке и соответственно импорт из CubeMX делаю в него и в итоге получаю Си проект с HAL. Но у меня овердофига готовых классов на C++, которые я хочу добавить в проект, и мне нужен проект C++. Сконвертировать проект на самом деле не сложно и делается это в 3 простых шага:

  1. Для начала копируем содержимое main.c в main.cpp и удаляем main.c (Важно, не пытайтесь оставить оба файла в проекте).
  2. Далее добавьте в .project файл проекта в секцию <natures> строку <nature>org.eclipse.cdt.core.ccnature</nature> Atollic true studio c++ project convert
  3.  Следующим шагом дублируем соответствующие настройки Си проекта в C++ как показано ниже:
Atollic c++ build settings
Копируем внимательно, чтобы не забыть ни одной строки

Собственно тоже самое проделывается с настройками Symbols, Optimiztion и т.д., если есть необходимость.

Теперь проект просто необходимо закрыть и открыть заново. чтобы изменения вступили в силу. В результате получаем: все компилируется и линкуется без ошибок, отладка работает корректно, из main.cpp вызывается HAL код и HAL callback функции могут вызываться в .cpp файлах.

Модификатор extern "C"  может быть необходим в .cpp файлах, если .cpp сторона вызывает функции на стороне .c кода или из .c кода вызывается callback функция, определенная в .cpp файле.

Если вы выполняете повторную генерацию проекта из CubeMX для внесения изменений данные изменения попадут в main.c и не попадут в main.cpp, поэтому необходимо их вносить вручную.

На этом вроде все, если когда-нибудь появится хак, который будет делать все это автоматически будет очень неплохо, а пока делаю все ручками)

 

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *