我试图在STM32 F411RE板中实现DSP的使用,但在不调用大量错误的情况下,我似乎无法包含必要的文件。
背景
我以前曾让CMSIS和CMSIS在Keil uVision中工作,但考虑到32k的代码限制,我很快就超过了评估极限。因此,我一直试图将CMSIS-DSP包含到Atollic中,但这似乎很难实现:CMSIS上可用的文档有限,在Atollic中实现的文档甚至更少。
一些相关的资源可以在Atollic用户指南以及StackOverflow主题#1和StackOverflow主题#2中找到。大多数其他相关的主题,我可以找到,只是参考使用Keil uVision或用户指南,而没有更多的帮助。
Atollic确实包含了一个内置的包管理器,其中基本的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添加到包含的目录中来修复这个问题(在'Build properties --> C/C++ Build --> Settings -> Tool Settings --> C Compiler -> directories‘)中找到这个问题。然而,这也不能解决当前的问题。
编码结果
函数找不到标头。

但是,主程序可以找到完全相同的标题。

头包含在构建选项->目录中。

刚刚验证了它也包含在“路径和符号”中,一旦您将其包含在构建选项中,就应该自动执行AFAIK:

更新
自从我的行动以来,我已经取得了一些进展,主要是通过混乱的包括,符号和链接。我现在已经成功地克服了原始错误(不幸的是,我不知道如何),但是现在我已经为startup_stm32文件带来了大量额外的错误。
这些似乎都是引用CMSIS (CMSIS / Device / ST / STM32F4xx / Source / template / ARM /.)中包含的模板文件的错误指令错误,它们不知何故无法解释这些模板中列出的各种命令。
示例错误:bad instruction __heap_base
发布于 2019-05-16 08:08:03
从那时起,我就发现了我的项目的问题:将CMSIS文件夹包括在Github中,这意味着在整个文件夹结构中都有很多模板。当试图构建/编译时,当这些模板仍然存在时,它会导致许多无效类型和重新定义错误的问题。
这些模板大多位于逻辑位置,但有些模板埋得很深,因此很难找到。我将尝试制作一个视频描述从github到您的TrueStudio项目中添加CMSIS (DSP)的过程。
同时,以下步骤应该使CMSIS和CMSIS在您的STM32 TrueStudio ProjecT中工作:
../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}上也有我为成功编译/构建项目而删除的其他集。../Drivers文件夹,因为包含似乎也不包括底层结构,它似乎还包括我的项目的错误。最好是手动地包含文件夹:您可以这样做:右键单击要包含的文件夹,单击底部附近的“添加/删除包含路径”选项,在按'OK‘包含该文件夹之前,在两个框中勾选以供发布和调试。重复另一个“包括”文件夹。../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE的../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE文件。还有这个名字的文件(RTE_Components.h)可用在NN (神经网络)CMSIS文件夹中,不要碰那些。将此文件复制到以前包含的任何位置(将我的文件放在../Drivers/CMSIS/Include中),并在您选择的IDE中打开它。在任何其他语句之前添加行#define CMSIS_device_header " DEVICE_NAME.h ",并将设备名称替换为STM32板名称。例如,我的RTE_Components.h文件看起来像
/* *自动生成的运行时环境组件配置文件*不修改!*项目:'STM32F410Tx_Nucleo‘*目标:’STM32F410Tx_Nucleo‘*/ #define CMSIS_device_header“stm32f4x.h”//定义自己的板头,例如stm32f4x.h或stm32f7x.h #ifndef RTE_COMPONENTS_H #define RTE_COMPONENTS_H #endif /* RTE_COMPONENTS_H */
确保CMSIS_device_header的设备名称与位于../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h中的头../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h文件相对应。__FPU_PRESENT (没有值也没有值'1'),因为我在STM32F411RE上有Cortex M4芯片,所以添加了ARM_MATH_CM4。这意味着我的符号列表看起来像:- `__FPU_PRESENT`
- `__packed` with value `__attribute__((__packed__))`
- `__weak` with value `__attribute__((weak))` -`ARM_MATH_CM4`
- `STM32F411xE`
- `USE_HAL_DRIVER` though this depends if you want to use the HAL or not
对于我的项目,我有以下包含在项目属性中的路径:
../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}"希望这对你也有帮助和工作!
https://stackoverflow.com/questions/56130725
复制相似问题