如何在 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 Guide
也
和
Whosebug topic #2
.我能找到的大多数其他相关主题只是参考了 Keil uVision 的使用或用户指南,没有更多帮助。
Atollic TrueStudio 确实包含一个 in-built 包管理器,其中可以下载基础 CMSIS,但它没有为 CMSIS-DSP 包提供此选项。
尝试的解决方案
我尝试手动下载相应的CMSIS包(STM32Cube_FW_F4_V1.24.0)并将相应的DSP包放入项目文件结构中。这然后允许使用 DSP 功能,例如
#include arm_math.h
或 arm_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 项目中工作:
确保从 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}
处还有其他集合,我已删除这些集合以便我的项目成功编译/构建。
包括文件夹中名为 include 的所有文件夹。据我所知,您不能只包含主 ../Drivers
文件夹,因为包含似乎并不包含底层结构,而且它似乎还包含我的项目的错误。最好只手动包含文件夹:您可以通过 right-clicking 在要包含的文件夹上,单击底部附近的选项 "Add/Remove include path" 并勾选两个框以进行发布和调试,然后再按 'OK' 以包含此文件夹。对其他 'include' 个文件夹重复上述步骤。
找到位于 ../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE
的 RTE_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
添加所需的符号(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
再次确保必要的包含定义明确,因为不包含仅 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}"
希望这对您有所帮助,也对您有用!
我正在尝试在 STM32 F411RE 板上实现 DSP 的使用,但我似乎无法在不调用大量错误的情况下包含必要的文件。
背景
我之前在 Keil uVision 中使用过 CMSIS 和 CMSIS-DSP,但考虑到 32k 的代码限制,我很快就超过了评估限制。因此,我一直在尝试将 CMSIS-DSP 包含到 Atollic TrueStudio 中,但这似乎很难实现:CMSIS-DSP 上可用的文档有限,而在 Atollic TrueStudio 中实现的文档就更少了。
一些相关资源可以在
Atollic TrueStudio User Guide
也
Atollic TrueStudio 确实包含一个 in-built 包管理器,其中可以下载基础 CMSIS,但它没有为 CMSIS-DSP 包提供此选项。
尝试的解决方案
我尝试手动下载相应的CMSIS包(STM32Cube_FW_F4_V1.24.0)并将相应的DSP包放入项目文件结构中。这然后允许使用 DSP 功能,例如
#include arm_math.h
或 arm_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 项目中工作:
确保从 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}
处还有其他集合,我已删除这些集合以便我的项目成功编译/构建。包括文件夹中名为 include 的所有文件夹。据我所知,您不能只包含主
../Drivers
文件夹,因为包含似乎并不包含底层结构,而且它似乎还包含我的项目的错误。最好只手动包含文件夹:您可以通过 right-clicking 在要包含的文件夹上,单击底部附近的选项 "Add/Remove include path" 并勾选两个框以进行发布和调试,然后再按 'OK' 以包含此文件夹。对其他 'include' 个文件夹重复上述步骤。找到位于
../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE
的RTE_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
添加所需的符号(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
再次确保必要的包含定义明确,因为不包含仅 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}"
希望这对您有所帮助,也对您有用!