如何在Atollic TrueStudio中包括CMSIS-DSP标头

时间:2019-05-14 12:39:07

标签: c header-files stm32 cmsis truestudio

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

背景

我以前在Keil uVision中使用过CMSIS和CMSIS-DSP,但是由于32k的代码限制,我很快就超过了评估限制。因此,我一直试图将CMSIS-DSP包含在Atollic TrueStudio中,但这似乎很难做到:CMSIS-DSP上可用的文档非常有限,因此在Atollic TrueStudio中的实现甚至更少。

一些相关资源可以在 Atollic TrueStudio User Guide  以及 StackOverflow topic #1StackOverflow topic #2 。我可以找到的大多数其他相关主题仅涉及Keil uVision的使用或《用户指南》,而没有更多帮助。

Atollic TrueStudio确实包含一个内置的软件包管理器,可以从中下载基本的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 DSP添加到所包含的目录(位于“构建属性- -> C / C ++ Build->设置->工具设置-> C编译器->目录`)。但是,这也不能解决当前的问题。

代码结果

该函数找不到标题

Function cannot find the header

但是主线可以找到完全相同的标题

Main.c can find the header however

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

Build options, includes the DSP header

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

Path and symbols

更新

自从我的OP以来,我取得了一些进展,主要是通过弄乱了include,符号和链接程序。现在,我已经设法克服了原始错误(尽管很遗憾,我不知道如何解决),但是对于startup_stm32文件,我现在招致了很多其他错误。

所有这些似乎都是错误的指令错误,它们引用CMSIS中包含的模板文件(CMSIS /设备/ ST / STM32F4xx /源代码/模板/ ARM / ...),从而无法解释这些模板中列出的各种命令

示例错误:bad instruction __heap_base

1 个答案:

答案 0 :(得分:1)

此后,我已经弄清楚了我项目的问题:在Github存储库中包含CMSIS文件夹意味着在整个文件夹结构中都存在许多模板。在这些模板仍然存在的情况下尝试构建/编译时,会导致类型无效和重新定义错误的许多问题。

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

同时,以下步骤应该使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. 包括所有包含在文件夹中的名称的文件夹。抱歉,您不能仅包含主../Drivers文件夹,因为include似乎并不包括基础结构,并且似乎还包含我的项目的错误。最好手动添加文件夹:可以通过右键单击要包含的文件夹,单击底部“添加/删除包含路径”附近的选项,然后选中两个框以进行释放和调试,然后按“确定”以进行操作。包括这个文件夹。对其他“包含”文件夹重复上述操作。

  3. 整理位于RTE_Components.h的{​​{1}}文件。 NN(神经网络)CMSIS-pack文件夹中也有此名称(../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE)的文件,请不要触摸这些文件。将此文件复制到以前包含的任何位置(将我的文件放置在RTE_Components.h中),然后在您选择的IDE中打开它。在任何其他语句之前添加行../Drivers/CMSIS/Include,并用您的STM32板名称替换设备名称。例如,我的RTE_Components.h文件看起来像

    #define CMSIS_device_header " DEVICE_NAME.h "

    确保CMSIS_device_header的设备名称与标题.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 */

  4. 中的文件
  5. 添加所需的符号(右键单击您的项目,转到属性,C / C ++常规,路径和符号;然后转到#Symbols选项卡)以定义FPU和您的Cortex Core类型。对我来说,我需要添加../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h(不带值或值为'1'),因为我在STM32F411RE上装有Cortex M4芯片,所以我要添加__FPU_PRESENT。这意味着我的符号列表如下:

    • ARM_MATH_CM4
    • __FPU_PRESENT的值为__packed
    • __attribute__((__packed__)),其值为__weak -__attribute__((weak))
    • ARM_MATH_CM4
    • STM32F411xE,但这取决于您是否要使用HAL
  6. 再次确保正确定义了必要的包含,因为仅包含1个目录可能会导致大量错误。可以通过以下方法找到这些属性:转到项目属性(右键单击您的项目,位于底部的选项),转到C / C ++ Build,设置,然后单击“工具设置”选项卡,“ C编译器”下拉列表和“目录”选项。

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

USE_HAL_DRIVER

希望这对您也有所帮助!