Урок 11. Конвертирование проекта для STM32 на языке C в проект C++.

Уроки STM32

Узнаем, как проект на языке Си, созданный с помощью STM32CubeMX, преобразовать в проект объектно-ориентированного языка C++.

Предыдущий урок     Список уроков     Следующий урок

Опять подготовительный урок, опять не пишем программу, опять не про кнопки. Хотел затронуть эту тему мимоходом, затем решил выделить в отдельный урок. Задачу конвертации проекта придется решать всем. А искать тему, как раздел в уроке намного сложнее, чем найти отдельный урок.

 

С помощью пакета STM32CubeMX мы создали проект. Но это оказался проект для классического языка Си, не объектно-ориентированного языка. Если мы в любой из наших учебных проектов попробуем вставить описание класса, то при компиляции получим сообщение об ошибке. Ключевое слово class компилятор не понимает.

Но мы собираемся использовать возможности объектно-ориентированного языка. Конечно, Ардуино несколько злоупотребляет классами, но во многих случаях без них не обойтись.

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

 

В папке Lesson я создал папку Lesson11 и скопировал туда учебный проект Lesson9_1.

Исходное имя

В этом проекте используются функции библиотек HAL и LL. Проверим обе библиотеки.

Переименовываем его в Lesson11_1.

Новое имя

Откроем проект в IDE Atollic TrueStudio. Там он у нас все равно отображается, как Lesson9_1.

Atollic TrueStudio

Нажмем на имя проекта правой кнопкой мыши, выберем Rename (Переименовать) и зададим новое имя Lesson11_1.

Получится проект C с новым именем Lesson11_1.

Atollic TrueStudio

Его мы будем преобразовывать в проект C++.

Надо выполнить 3 действия.

  • Переименовать файлы с расширением .c в папке Src в файлы с такими же именами, но расширением .cpp.

Сделать это проще всего также, как мы переименовали весь проект. А именно, нажатием на имя файла в проекте правой кнопкой мыши и выбором пункта Rename.

IDE

В нашем проекте это 4 файла.

IDE

  • Любым текстовым редактором открываем в проекте файл .project

Папка

и между тегами <nature >добавляем в него строку:

<nature>org.eclipse.cdt.core.ccnature</nature>

Должно получиться:

<natures>
    <nature>org.eclipse.cdt.core.cnature</nature>
    <nature>org.eclipse.cdt.core.ccnature</nature>
    <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
    <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>

Я копировал верхнюю строку и добавил одну букву c.

  • Остается копировать настройки C проекта в проект C++.

Выбираем в верхнем меню Project -> Build Settings.

Build Settings

Затем Tool Settings.

Tool Settings

Выбираем в левом столбце C Compilier -> Symbols.

Symbols

Выделяем и копируем настройки в буфер (Ctrl+Insert).

Нажимаем в левом столбце C++ Compilier -> Symbols и копируем настройки в окно для C++ (Shift+Insert).

Копирование настроек

Тоже самое делаем для  C Compilier -> Directories.

Directories

Компилируем. Ошибок нет.

Давайте для проверки объявим в программе класс.

Откроем файл main.cpp и добавим в него описание класса tst и создадим экземпляр класса tst1.

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

class tst{
    public:
        int x;
    private:
        int y;
};

tst tst1; // экземпляр класса tst

Можно в функции main() присвоить значение свойству класса.

/* USER CODE BEGIN 1 */

    tst1.x = 15;

Компиляция происходит без ошибок. Можно заниматься объектно-ориентированным программированием.

Вот ссылка на полный проект:

  Зарегистрируйтесь и оплатите. Всего 25 руб. в месяц за доступ ко всем ресурсам сайта!  

Еще раз последовательность действий:

  • Переименовать C-файлы (.c) с исходным текстом в C++ файлы (.cpp).
  • Добавить строчку в файл .project.
  • Продублировать настройки для C-проекта в настройки проекта C++.

Если компилятор выдаст ошибку о дублировании определения функций (redefinition), то может потребоваться добавить модификатор extern.

К сожалению, изменение конфигурации с помощью STM32CubeMX уже невозможно. Это придется делать вручную. STM32CubeMX будет изменять файл main.c.

 

Надеюсь, в следующем уроке займемся обработкой сигнала кнопки.

Предыдущий урок     Список уроков     Следующий урок

0

Автор публикации

не в сети 14 часов

Эдуард

21
Комментарии: 1176Публикации: 141Регистрация: 13-12-2015

3 комментария на «Урок 11. Конвертирование проекта для STM32 на языке C в проект C++.»

    • Здравствуйте!
      Зарегистрируйтесь на сайте, нажмите на любую ссылку оплатить … После этого все ссылки будут открытыми. Конечно, если вы войдете на сайт под своим логином.

      0

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

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