由于在 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 工具链而导致的错误的主要内容,如果未能解决你的问题,请参考以下文章