- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在STM32 F411RE板中实现DSP的使用,但是我似乎无法在不调用大量错误的情况下包含必要的文件。
背景
我以前在Keil uVision工作过CMSIS和CMSIS-DSP,但是由于32k的代码限制,我很快就超过了评估限制。因此,我一直试图将CMSIS-DSP包含到atolic TrueStudio中,但这似乎很难实现:CMSIS-DSP上可供使用的文档有限,在atolic TrueStudio中实现的文档更少。
一些相关资源可以在
Atollic TrueStudio User Guide
以及
StackOverflow topic #1
和
StackOverflow topic #2
. 我能找到的大多数其他相关主题都是关于Keil uVision或用户指南的使用,而没有更多的帮助。
Atolic TrueStudio确实包含了一个内置的包管理器,其中可以下载基本CMSIS,但它没有为CMSIS-DSP包提供此选项。
尝试解决方案
我试图手动下载相应的CMSIS包(STM32Cube_FW_F4_V1.24.0),并将相应的DSP包放入项目文件结构中。这样就允许使用诸如#include arm_math.h
或arm_rfft_fast_instance_f32 S;
也可以通过使用自动完成功能调用,因此由IDE识别。
但是,由于包含的函数无法识别它们的头依赖项(例如#include arm_math.h
),此过程也会调用许多错误。我发现混淆.Mc.C能够识别#include arm_math.h
命令,但所包含的函数不是,但我还是尝试通过将CMSIS DSP添加到所包含的目录(在“构建属性-> C/C++构建->设置->工具设置-> C编译器>目录>)来解决这个问题。然而,这也不能解决目前的问题。
代码结果
函数找不到标题
但是main可以找到完全相同的头
头包含在构建选项->目录中
刚刚验证了它也包含在“路径和符号”中,一旦您将其包含在构建选项中,它将自动执行AFAIK:
更新
自从我的作品以来,我已经取得了一些进展,主要是通过搞乱include,symbols和linker。现在,我已经成功地克服了最初的错误(虽然很不幸,我不知道如何克服),但是我现在已经为startup-stm32文件产生了大量额外的错误。
这些都是指CMSIS中包含的模板文件(CMSIS/Device/ST/STM32F4xx/Source/Templates/ARM/…)的错误指令,这些文件无法解释这些模板中列出的各种命令。
示例错误:bad instruction __heap_base
最佳答案
我已经为我的项目解决了这个问题:包括Github repo中的CMSIS文件夹意味着在整个文件夹结构中都有很多模板。当试图在这些模板仍然存在的情况下构建/编译时,会导致许多无效类型和重新定义错误的问题。
这些模板大多位于逻辑位置,但有些模板埋藏得很深,因此可能很难找到。我将尽快制作一个视频,描述将CMSIS(DSP)从github repo添加到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的文件夹。AFAIK您不能只包括main../Drivers
文件夹,因为includes似乎不包括底层结构,而且似乎还包括我的项目的错误。最好只是手动包含文件夹:您可以通过右键单击要包含的目标文件夹,单击底部“添加/删除包含路径”附近的选项,在“确定”包含此文件夹之前勾选两个框以进行释放和调试。对其他“include”文件夹重复此操作。
查找位于RTE_Components.h
的../STM32Cube_FW_xx_Vx/STM32xxxx-Nucleo\Templates\MDK-ARM\RTE
文件。在NN(Neural Networks)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 */
../Drivers/CMSIS/Device/ST/DEVICE_NAME/Include/DEVICE_NAME.h
__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
../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}"
关于c - 如何在Atollic TrueStudio中包含CMSIS-DSP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56130725/
CMSIS文件和外设驱动文件中写的是什么类型的代码。我怎样才能区分它们?任何例子都会更有帮助。谢谢你。 最佳答案 “CMSIS”是 Cortex Microcontroller Software In
这个问题已经有答案了: Storing third-party libraries in source control (17 个回答) Arguments for and against inclu
我正在尝试在 STM32F407 微 Controller 上实现 60kHz 带通滤波器,但遇到了一些问题。我在 MATLABs fdatool 的帮助下生成了过滤器,然后也在 MATLAB 中对其
最近我一直在检查 CMSIS DSP 复杂数学函数库,我看到了一些我无法完全理解的东西,因此我是关于 SO 的第一篇文章。 我无法理解的是 he11 复杂的点积函数如何产生正确的结果?该功能可在此处找
我下载了 CMSIS 版本 3,但在使用时遇到了一些问题。主要问题在startup_device.s。我不知道如何正确完成该文件,也找不到任何好的文档。有人尝试过使用这个cmsis版本吗?如何进行?正
我正在将产品移植到基于 CMSIS 的 RTOS,该产品需要获取 32 位整数形式的线程 ID。然而,CMSIS 线程 id 类型 (osThreadId) 是完全不透明的,类型定义为 struct
我想使用 CMSIS 中的 DSP 功能。我正在使用 STM32CubeIDE,我的目标板是 ST32F411RE Discovery。将 CMSIS DSP 与 Keil uVision 一起使用非
我正在使用 CMSIS API在我的 ARM Cortex-M CPU 的 C 程序中。 CMSIS 将 NVIC_DisableIRQ 函数定义为 __STATIC_INLINE void __NV
我正在使用 STM32F103C8T6 并希望使用 CMSIS,which is essentially just register definitions and no code ,让我的生活更轻松
我正在尝试制作一个使用各种功能的 C 程序,然后通过连接到 LPCXpresso 1769 的 DIP 开关,它必须选择要执行的功能(例如 00 二进制计数器 01 旋转 LED 等)。现在,我已经做
我已经从 8 位裸机寄存器转向,并且必须学习一些新的 C Kungfu 才能理解 CMSIS 核心方法。 我这里有一段来自 ARM Cortex M 供应商的外设访问层的代码片段。他们创建了这个 SN
FreeRTOS 和 CMSIS-RTOS 有什么区别?谁能解释这两个 RTOS 的相似之处或不同之处? 最佳答案 我认为这里的混淆来源是存在 CMSIS-RTOS API( v1 和 v2 ),并且
在 gcc 的 CMSIS 定义中,您可以找到如下内容: static __INLINE void __DMB(void) { __ASM volatile ("dmb"); } 我的问题是:如果内存
我在 stm32f103rc 中尝试 DMA。我按照这个教程https://letanphuc.net/2014/06/how-to-use-stm32-dma/并使用 CMSIS CORE 编写了我
我编写了一个使用 CMSIS DSP 库中的 arm_cfft_f32 函数的代码。如何将 CMSIS DSP 库添加到我的项目的 Makefile 中? STM32CubeMX为STM32F407芯
我们在 STM32F407 板上的 CMSIS 和 FreeRTOS 中遇到互斥锁问题。 有两个线程可以通过 UART 访问硬件 radio 。我们正在使用互斥体来确保一次只有一个线程可以与 radi
我使用 MCB1700 评估板。Keil为开发者提供了RL-ARM库。但几个小时前我创建了 CMSIS Librariy。它还具有用于 USB、以太网等的 header 和 c 文件(带有示例)。“R
所以我在 STM32F427 微 Controller 上使用 CMSIS-RTOS 邮件队列机制和 Keil uVision 5.0.5 运行在 180MHz。并且不时地使用 osMailFree(
我正在尝试为我的 Cortex-M0 嵌入式处理器设置 CLion C 工作环境。我是 CLion 和 cmake 的新手,我已经为这个问题苦苦挣扎了好几天: 问题出现在 CMSIS 中包含的 cor
您好,我想知道让 ARM Cortex M0+ 进入深度 sleep 的正确方法是什么。特别是我正在使用 CMSIS-RTOS RTX。 我的 IRQ 处理方式是 ISR 只是设置 OS Signal
我是一名优秀的程序员,十分优秀!