Keil行尾的意外字符 - 但没有

时间:2015-11-25 17:58:40

标签: c keil armcc

我正在使用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"

任何想法为什么?

2 个答案:

答案 0 :(得分:0)

标头文件中出现unexpected #define NOP

12个错误对应于12个NOP,意味着NOP存在问题,而不是某些行结束问题。此外,相对于标题放置,错误的发生也发生了变化。

在某些头文件中定义了这么短的通用标记NOP会产生这些不幸的影响。 IMO,如果合理可能,重新出厂#define

答案 1 :(得分:0)

.s文件中出现此错误。

通过选中“使用ArmClang V6进行组装”复选框来解决错误A1137E 在选项对话框中,标签ASM