expected ‘(‘ after 、error: use of undeclared identifier ‘PRESERVE8‘

文章描述了在配置Nordic52xx系列芯片的Keil开发环境时遇到的编译错误,包括未声明的标识符和编译器选项不支持等问题。建议使用ARMCompiler5替代6,可能需要降低Keil版本或者考虑使用SES开发环境,因为Nordic的SDK更新主要集中在NCS和SES上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在搭建nordic 52xx系列keil开发环境时,发现报错。

报错1:

../../../../../../components/libraries/util/app_error_handler_keil.c(47): error: use of undeclared identifier 'PRESERVE8'

参考解决方案:ARM 编译器错误和警告参考指南版本 5.05

报错2:

../../../../../../components/libraries/util/app_error_handler_keil.c(45): error: expected '(' after 'asm'
__ASM void app_error_handler(ret_code_t error_code, uint32_t line_num, const uint8_t * p_file_name)
      ^
../../../../../../components/libraries/util/app_error_handler_keil.c(45): error: expected ';' after top-level asm block
__ASM void app_error_handler(ret_code_t error_code, uint32_t line_num, const uint8_t * p_file_name)

报错3:

ArmClang: error: unsupported option '--reduce_paths'

以上报错均是编译器问题,SDK默认是compiler5 for keil,对于compiler6而言,很多特性不再支持。

我们可以下载compiler5:Legacy Arm Compiler 5, 4.1, and RVCT (ACOMP5)

然后在工程中添加compiler5:µVision User's Guide (arm.com)

不同编译器的差异:Arm Compiler for Embedded Migration and Compatibility Guide

虽然改了compiler版本,但是有可能Keil版本太高,导致无法编译仍然存在。建议降低keil版本。如果是52、53系列的nordic芯片建议使用SES支持度更高,目前noridc在keil开发环境的sdk在维护状态了,只有最新的NCS开发包在继续更新,它可以使用SES开发环境。

### Keil 5中 'use of undeclared identifier' 编译错误解决方案 当在Keil 5环境中遇到`use of undeclared identifier`编译错误时,通常意味着编译器无法识别某个标识符。这可能是由于头文件缺失、宏定义不存在或是库路径配置不正确等原因造成的。 对于特定于UART模块中的`fputc`函数实现所引发的此类错误: - 如果代码如下所示,则可能是因为缺少必要的包含声明或链接设置不当[^1]。 ```c int fputc(int ch, FILE *f){ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000); return ch; } ``` 为了修正这个问题,可以采取以下几个措施来确保所有必需组件都被正确定义并可访问: #### 添加必要的头文件 确认已经包含了所有需要用到的标准库以及硬件抽象层(HAL)相关的头文件。例如,在源文件顶部加入以下语句以引入标准I/O支持和HAL驱动程序接口: ```c #include <stdio.h> #include "stm32fxxx_hal.h" ``` 这里假设使用的MCU系列为STM32Fx系列;如果是其他型号,请替换相应的头文件名称。 #### 配置预处理器选项 如果项目依赖某些外部库或自定义宏定义(如`USE_STDPERIPH_DRIVER`, `STM32F10X_HD`),则需确保这些符号已经在项目的预处理参数里被指定。可以通过IDE内的工程属性对话框来进行相应调整[^2]。 #### 设置正确的搜索路径 验证当前工作区下的编译路径是否涵盖了所有需要引用到的目录位置。特别是那些存放第三方库或者私有头文件的地方应该被列入考虑范围之内。同样可以在IDE内完成这项操作,具体取决于所用版本的具体界面布局。 通过上述方法能够有效解决大部分由未声明标识符引起的编译失败情况。当然,针对不同场景还可能存在更多个性化的调试技巧,但以上建议覆盖了最常见的几种情形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值