C语言 删除IAR中不使用的模块和变量

j2qf4p5b  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(163)

我是嵌入式系统的新手,我正在使用IAR编译器与ST MCUS一起工作(stm32f103 c8 t6)我想使用CMSIS DSP库,这是一个很大的库。我只有一个20 KB RAM和64 KB FLASH的MCU。我面临的问题是,当我使用与傅立叶计算相关的函数时,它给出了一个内存不足的错误,而我使用的是一个小长度的傅立叶,但是编译器将整个库添加到了我的项目中,有注解说IAR声明不使用不需要的模块和变量。(但这对我不起作用)经过大量的搜索和询问,https://github.com/ARM-software/CMSIS-DSP/issues/91发现,可以定义一系列规则,以便只使用必须在DSP库编译之前定义的必要部分。(不同模式的定义已包含在库中)。
在IAR中,CMSIS库只需一个勾号就可以添加。现在我的问题是,是否可以为这个库添加设置?如果可以,这些命令应该添加到哪个部分,因为IAR有几个选项

project -->option-->compiler-->preprocess
 project -->option-->compiler-->extra option -->command line
 project -->option-->assembler-->preprocess
 project -->option-->assembler-->extra option -->command line
 project -->option-->linker-->define.... 
 project -->option-->linker-->extra option -->command line

我在程序的顶部定义了一系列的定义,但它不起作用。下面是定义:

现在我明白了模块的选择和使用是由链接器完成的,所以我认为如果需要预处理,就必须在链接器中定义。但是尽管进行了测试,我没有得到答案,在链接器头的不同部分定义了所需的定义。这是我现在想到的
1-从一开始,我就应该将cmsis-dsp库添加到项目中,而不是使用默认的IAR编译器库。
2-如果您有这方面的经验能够设置默认库,我将不胜感激您的指导

oxf4rvwz

oxf4rvwz1#

包含完整源代码的原始库项目,以及每个支持的核心变体的构建配置,在arm\CMSIS\DSP\Projects\IAR\下提供。
我建议您在应用程序项目中禁用CMSIS复选框,使用提供的库项目编译您自己的自定义库,并在所使用的核心变体的构建配置之上使用所需的预处理器符号。然后将您的自定义库添加到应用程序项目中,以及预处理器所需的任何头包含目录:

$TOOLKIT_DIR$\CMSIS\Core\Include
$TOOLKIT_DIR$\CMSIS\DSP\Include

最后,请记住,DSP指令是在Arm Cortex-M4内核上引入的。相比之下,使用Cortex-M3(如STM32F103)将呈现更慢的代码,以及基于软件的浮点仿真,无论编译器有多好。

相关问题