如何在 Atollic TrueStudio 中包含 CMSIS-DSP headers

How to include the CMSIS-DSP headers in Atollic TrueStudio

我正在尝试在 STM32 F411RE 板上实现 DSP 的使用,但我似乎无法在不调用大量错误的情况下包含必要的文件。

背景

我之前在 Keil uVision 中使用过 CMSIS 和 CMSIS-DSP,但考虑到 32k 的代码限制,我很快就超过了评估限制。因此,我一直在尝试将 CMSIS-DSP 包含到 Atollic TrueStudio 中,但这似乎很难实现:CMSIS-DSP 上可用的文档有限,而在 Atollic TrueStudio 中实现的文档就更少了。

一些相关资源可以在 Atollic TrueStudio User GuideWhosebug topic #2 .我能找到的大多数其他相关主题只是参考了 Keil uVision 的使用或用户指南,没有更多帮助。

Atollic TrueStudio 确实包含一个 in-built 包管理器,其中可以下载基础 CMSIS,但它没有为 CMSIS-DSP 包提供此选项。

尝试的解决方案

我尝试手动下载相应的CMSIS包(STM32Cube_FW_F4_V1.24.0)并将相应的DSP包放入项目文件结构中。这然后允许使用 DSP 功能,例如 #include arm_math.harm_rfft_fast_instance_f32 S; 也可以通过使用自动完成功能调用,因此被 IDE.

识别

但是,此过程也会调用许多错误,因为包含的函数无法识别它们的 header 依赖项(例如 #include arm_math.h)。我发现 main.c 能够识别 #include arm_math.h 命令但包含的功能却不能,但我还是尝试通过将 CMSIS DSP 添加到包含的目录(位于“Build properties --> C/C++ Build --> Settings --> Tool Settings --> C Compiler --> Directories`)。但是,这也不能解决手头的问题。

代码结果

函数找不到 header

不过主能找到一模一样的header

并且 header 包含在构建选项 -> 目录中

刚刚验证它也包含在 'path and symbols' 中,一旦您将它包含在构建选项中,它应该会自动执行 AFAIK:

更新

自从我的 OP 以来,我取得了一些进步,主要是通过处理包含、符号和链接器。我现在已经设法克服了最初的错误(尽管不幸的是我不知道如何做),但是我现在已经为 startup_stm32 文件招致了大量额外的错误。

这些似乎都是错误的指令错误,涉及 CMSIS 中包含的模板文件(CMSIS / Device / ST / STM32F4xx / Source / Templates / ARM / ...),不知何故无法解释中列出的各种命令这些模板。

错误示例:bad instruction __heap_base

从那以后,我发现了我的项目的问题:包括 Github 存储库中可用的 CMSIS 文件夹意味着整个文件夹结构中存在大量模板。在这些模板仍然存在的情况下尝试构建/编译时,会导致很多类型无效的问题和 re-defining 错误。

这些模板中的大多数都位于合理的位置,但有些模板埋藏得很深,因此可能很难找到。我将尽快制作一个视频,描述将 github 存储库中的 CMSIS (DSP) 添加到您在 TrueStudio 中的项目的过程。

同时,以下步骤应该使 CMSIS 和 CMSIS-DSP 在您的 STM32 TrueStudio 项目中工作:

  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. 包括文件夹中名为 include 的所有文件夹。据我所知,您不能只包含主 ../Drivers 文件夹,因为包含似乎并不包含底层结构,而且它似乎还包含我的项目的错误。最好只手动包含文件夹:您可以通过 right-clicking 在要包含的文件夹上,单击底部附近的选项 "Add/Remove include path" 并勾选两个框以进行发布和调试,然后再按 'OK' 以包含此文件夹。对其他 'include' 个文件夹重复上述步骤。

  3. 找到位于 ../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTERTE_Components.h 文件。 NN(神经网络)CMSIS-pack 文件夹中也有同名 (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 的设备名称对应于 header.h 文件位于 ../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h

  4. 添加所需的符号(right-click 你的项目,转到属性,C/C++ 常规,路径和符号;然后转到#Symbols 选项卡)来定义FPU 和你的 Cortex Core 类型。对我来说,我需要添加 __FPU_PRESENT(没有值或值“1”),因为我在 STM32F411RE 上有 Cortex M4 芯片,所以我添加了 ARM_MATH_CM4。这意味着我的符号列表如下所示:

    • __FPU_PRESENT
    • __packed 值为 __attribute__((__packed__))
    • __weak 值为 __attribute__((weak)) -ARM_MATH_CM4
    • STM32F411xE
    • USE_HAL_DRIVER 虽然这取决于您是否要使用 HAL
  5. 再次确保必要的包含定义明确,因为不包含仅 1 个目录会导致大量错误。这些可以通过转到项目属性(right-click 你的项目,底部的选项),转到 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}"

希望这对您有所帮助,也对您有用!