Как включить заголовки CMSIS-DSP в Atollic TrueStudio - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь реализовать использование DSP в плате STM32 F411RE, но я не могу включить необходимые файлы, не вызывая многочисленные ошибки.

Фон

Ранее у меня были CMSIS и CMSIS-DSP, работающие в Keil uVision, но учитывая ограничение кода в 32 КБ, которое довольно быстро выводит меня за пределы оценки. В связи с этим я пытался включить CMSIS-DSP в Atollic TrueStudio, но, по-видимому, это трудно осуществить: для CMSIS-DSP имеется ограниченная документация для начала и, тем более, для реализации в Atollic TrueStudio.

Некоторые связанные ресурсы можно найти в Atollic TrueStudio. Руководство пользователя. так же как Тема StackOverflow # 1 а также Тема StackOverflow # 2 , Большинство других связанных с этим тем, которые я могу найти, просто ссылаются на использование Keil uVision или руководство пользователя без особой помощи.

Atollic TrueStudio включает встроенный менеджер пакетов, в котором базовый CMSIS доступен для загрузки, но он не предоставляет эту опцию для пакета CMSIS-DSP.

Попытка решения

Я попытался вручную загрузить соответствующий пакет CMSIS (STM32Cube_FW_F4_V1.24.0) и поместить соответствующий пакет DSP в структуру файла проекта. Это тогда позволяет использовать функции DSP, такие как #include arm_math.h или arm_rfft_fast_instance_f32 S;, которые также могут вызываться с использованием функции автозаполнения и, таким образом, распознаются в IDE.

Однако этот процесс также вызывает много ошибок, поскольку включенным функциям не удается распознать их зависимости заголовка (например, #include arm_math.h). Меня смущает, что main.c может распознавать команду #include arm_math.h, но включенных функций нет, но я, тем не менее, пытаюсь это исправить, добавив CMSIS DSP во включенные каталоги (см. «Свойства сборки» -> Сборка C / C ++ -> Настройки -> Настройки инструмента -> Компилятор C -> Каталоги`). Однако это также не устраняет проблему.

Результаты кода

Функция не может найти заголовок

Function cannot find the header

Однако главный может найти точно такой же заголовок

Main.c can find the header however

И заголовок включен в опции сборки -> каталоги

Build options, includes the DSP header

Только что проверил, что он также включен в «путь и символы», что он должен делать автоматически AFAIK, как только вы включите его в опции сборки:

Path and symbols

Обновление

Со времени моего ОП я добился определенного прогресса, в основном за счет возни с включениями, символами и компоновщиком. Теперь мне удалось победить исходную ошибку (хотя, к сожалению, я понятия не имею, как), но теперь у меня возникло большое количество дополнительных ошибок для файлов startup_stm32.

Все эти ошибки являются ошибочными инструкциями, относящимися к файлам шаблонов, включенным в CMSIS (CMSIS / Device / ST / STM32F4xx / Source / Templates / ARM / ...), которые каким-то образом не могут интерпретировать различные команды, перечисленные в этих шаблонах. .

Пример ошибки: bad instruction __heap_base

1 Ответ

1 голос
/ 16 мая 2019

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

Большинство из этих шаблонов находятся в логическом месте, но некоторые из них закопаны довольно глубоко, и поэтому их может быть трудно найти. Вскоре я постараюсь сделать видео, описывающее процесс добавления CMSIS (DSP) из репозитория github в ваш проект в TrueStudio.

Тем временем следующие шаги должны заставить CMSIS и CMSIS-DSP работать в вашем STM32 TrueStudio ProjecT:

  1. Убедитесь, что все шаблоны (папки) удалены из папки CMSIS. Это может потребовать некоторых поисков и экспериментов: особенно вредные скрыты в ../STM32Cube_FW_xx_Vx.xx/Drivers/CMSIS/Device/ST/STM32xxxx/Source/{Templates} в то время как есть и другие наборы в ../STM32Cube_FW_xx_Vx.xx/Drivers/CMSIS/DSP/{Examples} и ../STM32Cube_FW_xx_Vx.xx/Drivers/CMSIS/DSP/{Projects}, которые я удалил для моего проекта для успешной компиляции / сборки.

  2. Включить все названные папки, включить в папки. AFAIK, вы не можете просто включить основную папку ../Drivers, так как в нее не входят, по-видимому, и базовая структура, и, похоже, в нее включены ошибки для моего проекта. Лучше всего просто включить папки вручную: вы можете сделать это, щелкнув правой кнопкой мыши нужную папку для включения, щелкнув опцию внизу «Добавить / удалить включаемый путь» и отметив оба поля для выпуска и отладки, прежде чем нажать «ОК», чтобы включить эту папку. Повторите эти действия для других папок «include».

  3. Получите файл RTE_Components.h, расположенный в ../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE. В папке CMSIS-пакета NN (Neural Networks) есть также файлы с этим именем (RTE_Components.h), не трогайте их. Скопируйте этот файл в любое место, которое вы ранее включили (поместил мой в ../Drivers/CMSIS/Include), и откройте его в выбранной вами IDE. Добавьте строку #define CMSIS_device_header " DEVICE_NAME.h " перед любым другим оператором и замените имя устройства на имя вашей платы STM32. Например, мой файл RTE_Components.h выглядит как

    /*
     * Auto generated Run-Time-Environment Component Configuration File
     *      *** Do not modify ! ***
     * Project: 'Project' 
     * Target:  'STM32F410Tx_Nucleo' 
     */
    #define CMSIS_device_header "stm32f4xx.h" // define  own board header, eg stm32f4xx.h or stm32f7xx.h
    #ifndef RTE_COMPONENTS_H
    #define RTE_COMPONENTS_H
    #endif /* RTE_COMPONENTS_H */
    

    Убедитесь, что имя устройства для CMSIS_device_header соответствует заголовку .h файл находится в ../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h

  4. Добавьте необходимые символы (щелкните правой кнопкой мыши свой проект, перейдите в свойства, Общие сведения о C / C ++, Пути и символы; затем перейдите на вкладку #Symbols), чтобы определить FPU и тип вашего ядра Cortex. Для меня мне нужно добавить __FPU_PRESENT (без значения или значения '1'), и поскольку у меня есть чип Cortex M4 на STM32F411RE, я добавляю ARM_MATH_CM4. Это означает, что мой список символов выглядит так:

    • __FPU_PRESENT
    • __packed со значением __attribute__((__packed__))
    • __weak со значением __attribute__((weak)) - ARM_MATH_CM4
    • STM32F411xE
    • USE_HAL_DRIVER хотя это зависит от того, хотите вы использовать HAL или нет
  5. Еще раз убедитесь, что необходимые включения правильно определены, поскольку не включение только одного каталога может привести к большому количеству ошибок. Их можно найти, перейдя в свойства проекта (щелкните правой кнопкой мыши свой проект, опция внизу), перейдите к разделу «Сборка C / C ++», «Настройки», затем откройте вкладку «Настройки инструмента», раскрывающийся список «Компилятор C» и выберите «Каталоги».

Для моего проекта у меня есть следующие пути включения в свойствах проекта:

../Inc                                           (should be by default)
../Drivers/CMSIS/Device/ST/STM32F4xx/Include     (should be by default) 
../Drivers/STM32F4xx_HAL_Driver/Inc              (should be by default)
../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy       (should be by default)
../Drivers/CMSIS/Include                         (should be by default)

"${workspace_loc:/${ProjName}/Drivers/Device/ST/STM32F4xx/Include}"
"${workspace_loc:/${ProjName}/Drivers/CMSIS/Core/Include}" 
"${workspace_loc:/${ProjName}/Drivers/CMSIS/Core_A/Include}"
"${workspace_loc:/${ProjName}/Drivers/CMSIS/DSP/Include}"

Надеюсь, это поможет и вам тоже!

...