我正在使用Keil uVision v5.14来编译nrf51xx cpu的一些代码。 我总是使用一个名为nrf_delay.h的头文件,它有一些在汇编程序中编码的延迟例程。 突然之间,在编译期间,在所有" NOP"上收到上述错误。行:
#if defined ( __CC_ARM )
static __ASM void __INLINE nrf_delay_us(uint32_t volatile number_of_us)
{
loop
SUBS R0, R0, #1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BNE loop
BX LR
}
#elif defined ( __ICCARM__ )
...
错误文字:
..\..\..\Include\nrf_delay.h(12): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(13): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(14): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(15): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(16): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(17): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(18): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(19): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(20): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(21): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(22): error: A1137E: Unexpected characters at end of line
..\..\..\Include\nrf_delay.h(23): error: A1137E: Unexpected characters at end of line
奇怪的是,NOP之后绝对没有多余的角色。 我也尝试用旧版本替换nrf_delay.h,或者更改项目设置以匹配工作设置,但没有运气。
整个事情都包含在
之间#if defined ( __CC_ARM )
但我不确定是否" _CC_ARM"或" ICCARM "被定义为。 C编译器是Armcc V5.05。
更新
我从一个正在运行的项目开始,我已经从上一步一步一步地添加了我生气的变化。 似乎只是在项目的新.c文件中包含nrf_delay.h就会触发问题。
但是,nrf_delay.h包含在许多其他.c文件中,并且nrf_delay_us()被多次使用而没有这样的问题。
更新2 - 已解决,但仍然是一个错误的 所以,我的.c文件中有一些#defines。 如果我这样说:
#include <stdio.h>
#include <stdint.h>
#include "fw_update.h"
#include "registers.h"
#include "nrf51.h"
#include "boarddef.h"
#include "hal.h"
#include "nrf_delay.h" <-- this is giving the error
如果我这样说:
#include <stdio.h>
#include <stdint.h>
#include "nrf_delay.h" <-- this works!
#include "fw_update.h"
#include "registers.h"
#include "nrf51.h"
#include "boarddef.h"
#include "hal.h"
任何想法为什么?
答案 0 :(得分:0)
标头文件中出现unexpected #define
NOP
。
12个错误对应于12个NOP
,意味着NOP
存在问题,而不是某些行结束问题。此外,相对于标题放置,错误的发生也发生了变化。
在某些头文件中定义了这么短的通用标记NOP
会产生这些不幸的影响。 IMO,如果合理可能,重新出厂#define
。
答案 1 :(得分:0)
.s文件中出现此错误。
通过选中“使用ArmClang V6进行组装”复选框来解决错误A1137E 在选项对话框中,标签ASM