由于在 IAR 工作台中使用 GNU ARM 工具链而导致的错误

Posted

技术标签:

【中文标题】由于在 IAR 工作台中使用 GNU ARM 工具链而导致的错误【英文标题】:Error due to GNU ARM toolchain usage in IAR workbench 【发布时间】:2015-10-21 11:12:28 【问题描述】:

我最近开始使用 STM32F4Discovery 板进行编程,并使用 IAR 工作台作为 IDE。我应该在 Eclipse 中使用已经开发的程序作为我项目的一部分。当我将它导入 IAR Workbench 时,我收到以下错误和警告: Error[Pe020]: identifier "_impure_ptr" is undefined Warning[Pe223]: function "_REENT_INIT_PTR" declared implicitly Warning[Pe223]: function "_reclaim_reent" declared implicitly C

我意识到_impure_ptr_REENT_INIT_PTR_reclaim_reent 是 GNU ARM 工具链中存在的reent.h 文件的一部分。这被用作使用 FreeRTOS 功能的一部分。使用 Eclipse,这不是问题,但是在使用 IAR 工作台时,是否还有其他类似于 reent.h 的 IAR 工作台的文件我应该包括在内?

我知道这是一个幼稚的问题,但我是嵌入式编程的初学者,仍处于建立此项目的初始阶段。

【问题讨论】:

【参考方案1】:

这些是 NewLib 定义,而不是直接的 GNU ARM 工具链定义。大概 Eclipse 应用程序正在使用 GCC 库,其中包括 NewLib(无论如何都不是为小型嵌入式系统创建的) - 而 IAR 项目正在使用 IAR 自己的(并且更适合小型嵌入式系统)库。

FreeRTOS 可以配置为使用一些 NewLib 重入功能,但这不是默认配置。如果这些隐式和未定义的定义来自 FreeRTOS 代码本身,请确保在 FreeRTOSConfig.h 中将 configUSE_NEWLIB_REENT 设置为 0。

【讨论】:

以上是关于由于在 IAR 工作台中使用 GNU ARM 工具链而导致的错误的主要内容,如果未能解决你的问题,请参考以下文章

ARM交叉编译工具链分类说明

Keil MDK 和 IAR 两款ARM开发工具哪个比较好

如何修复“[Lp002]:IAR ARM 工具重定位失败?

如何使用 ARM 的 IAR 编译器编译 Google Test

ARM 编译工具keil 和 IAR 命令行编译和下载

STM32 Eclipse + ARM GNU 工具链错误链接器