2016-01-25 43 views
0

我想用MinGW 4.8.2编译NRF driver。我得到这个错误:”错误:在'volatile'之前的预期主表达式'“

在文件中包含从

b:/nrfdriver/sdk/nRF51_SDK_8.1.0_b6ed55f/components/device/nrf51.h:119:0, 
       from b:/nrfdriver/sdk/nRF51_SDK_8.1.0_b6ed55f/components/softdevice/s130/headers/nrf_soc.h:50, 
       from b:/nrfdriver/pc-ble-driver-0.5.0/driver/inc_override/nrf_soc.h:21, 
       from b:/nrfdriver/pc-ble-driver-0.5.0/driver/inc_override/app_util_platform.h:26, 
       from b:/nrfdriver/sdk/nRF51_SDK_8.1.0_b6ed55f/components/drivers_nrf/uart/app_uart.h:27, 
       from b:\nrfdriver\pc-ble-driver-0.5.0\driver\src\app_uart_pc.c:13: 
C:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/4.8.2/include/xmmintrin.h: 
In function 'void _mm_setcsr(unsigned int)': 
b:/nrfdriver/sdk/nRF51_SDK_8.1.0_b6ed55f/components/toolchain/gcc/core_cm0.h:164:21: 
error: expected primary-expression before 'volatile' #define __I 
volatile    /*!< Defines 'read only' permissions */ 
        ^driver\CMakeFiles\s130_nrf51_ble_driver.dir\build.make:297: recipe for 
target 'driver/CMakeFiles/s130_nrf51_ble_driver.dir/src/app_uart_pc.c 
.obj' failed 

错误来源于此行:

#define __I  volatile    /*!< Defines 'read only' permissions     */ 

哪有这么简单#define导致一个编译错误,并知道怎样我应该解决这个问题? (升级编译器不是一种选择,因为此版本的驱动程序应该使用此版本的MinGW构建)。

注意,司机是为了建在32位,我试图建立其靶向64位,说不上如果这可能是问题的原因...

+0

如果您将它编译为32位而不是64位,错误会消失吗? – NathanOliver

+0

也许你需要尝试不同的编译器,或者尝试设置c版本,我想你应该有-std = c99 – marcinj

+0

你可以在xmmintrin.h上显示相关代码吗? – imreal

回答

2

如果我们也看在什么xmmintrin.h标头?

/* Set the control register to I. */ 
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 
_mm_setcsr (unsigned int __I) 
{ 
    __builtin_ia32_ldmxcsr (__I); 
} 

ouch,另一个使用__I

+0

该死的,我发布我的问题太快了。我不熟悉MinGW,我几乎可以肯定这是一个编译器问题。显然,它来自代码本身。感谢您的快速回答! – jpo38

+0

如果有人遇到同样的问题:我在驱动程序和SDK文件夹中用'__NRF_I'手动替换了所有'__I':编译好了! – jpo38

相关问题