首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Atollic中包含CMSIS-DSP报头

如何在Atollic中包含CMSIS-DSP报头
EN

Stack Overflow用户
提问于 2019-05-14 12:39:06
回答 1查看 2K关注 0票数 2

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

背景

我以前曾让CMSIS和CMSIS在Keil uVision中工作,但考虑到32k的代码限制,我很快就超过了评估极限。因此,我一直试图将CMSIS-DSP包含到Atollic中,但这似乎很难实现:CMSIS上可用的文档有限,在Atollic中实现的文档甚至更少。

一些相关的资源可以在Atollic用户指南以及StackOverflow主题#1StackOverflow主题#2中找到。大多数其他相关的主题,我可以找到,只是参考使用Keil uVision或用户指南,而没有更多的帮助。

Atollic确实包含了一个内置的包管理器,其中基本的CMSIS可供下载,但它没有为CMSIS-DSP包提供此选项。

尝试解决方案

我尝试手动下载相应的CMSIS包(STM32Cube_FW_F4_V1.24.0),并将相应的DSP包放到项目文件结构中。这就允许使用DSP函数,例如#include arm_math.harm_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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-16 08:08:03

从那时起,我就发现了我的项目的问题:将CMSIS文件夹包括在Github中,这意味着在整个文件夹结构中都有很多模板。当试图构建/编译时,当这些模板仍然存在时,它会导致许多无效类型和重新定义错误的问题。

这些模板大多位于逻辑位置,但有些模板埋得很深,因此很难找到。我将尝试制作一个视频描述从github到您的TrueStudio项目中添加CMSIS (DSP)的过程。

同时,以下步骤应该使CMSIS和CMSIS在您的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文件夹,因为包含似乎也不包括底层结构,它似乎还包括我的项目的错误。最好是手动地包含文件夹:您可以这样做:右键单击要包含的文件夹,单击底部附近的“添加/删除包含路径”选项,在按'OK‘包含该文件夹之前,在两个框中勾选以供发布和调试。重复另一个“包括”文件夹。
  3. 查找位于../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文件相对应。
  4. 添加所需的符号(右键单击您的项目,转到属性,C/C++常规,路径和符号;然后转到#符号选项卡)来定义FPU和您的Cortex Core类型。对我来说,我需要添加__FPU_PRESENT (没有值也没有值'1'),因为我在STM32F411RE上有Cortex M4芯片,所以添加了ARM_MATH_CM4。这意味着我的符号列表看起来像:
代码语言:javascript
复制
- `__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

  1. 同样,请确保正确定义了必要的包含,因为不包括仅包含一个目录可能导致大量错误。可以通过转到项目属性(右键单击项目,底部的选项)、C/C++构建、设置、然后是工具设置选项卡、C编译器下拉列表和目录选项来找到这些属性。

对于我的项目,我有以下包含在项目属性中的路径:

代码语言:javascript
复制
../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}"

希望这对你也有帮助和工作!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56130725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档