我有一个嵌入式C项目,可以在控制台上使用make构建和运行,但是Eclipse CDT给了我错误。
在main.c中,此函数使用宏APP_BUTTON_INIT:
static void buttons_init(void)
{
static app_button_cfg_t buttons[] =
{
{SIGNAL_ALERT_BUTTON, false, NRF_GPIO_PIN_NOPULL, button_event_handler},
{BONDMNGR_DELETE_BUTTON_PIN_NO, false, NRF_GPIO_PIN_NOPULL, NULL}
};
APP_BUTTON_INIT(buttons, sizeof(buttons) / sizeof(buttons[0]), BUTTON_DETECTION_DELAY, false);
}
APP_BUTTON_INIT宏在app_button.h中定义如下:
#define APP_BUTTON_INIT(BUTTONS, BUTTON_COUNT, DETECTION_DELAY, USE_SCHEDULER) \
do \
{ \
uint32_t ERR_CODE = app_button_init((BUTTONS), \
(BUTTON_COUNT), \
(DETECTION_DELAY), \
(USE_SCHEDULER) ? app_button_evt_schedule : NULL); \
APP_ERROR_CHECK(ERR_CODE); \
} while (0)
错误是
Symbol 'app_button_evt_schedule' could not be resolved
但是该函数在同一个头文件app_button.h中进一步定义:
static __INLINE uint32_t app_button_evt_schedule(app_button_handler_t button_handler,
uint8_t pin_no)
{
app_button_event_t buttons_event;
buttons_event.button_handler = button_handler;
buttons_event.pin_no = pin_no;
return app_sched_event_put(&buttons_event, sizeof(buttons_event), app_button_evt_get);
}
我试过Project右键单击 - >指数 - >重建和清新所有文件,没有快乐。我正在使用带有CDT 8.2.1的Eclipse Kepler SR1。为什么Eclipse不能看到这个函数?
makefile的第一个操作是这个(这个工作):
mkdir _build
"/Users/Eliot/dev/gcc-arm/bin/arm-none-eabi-gcc" -DNRF51822_QFAA_CA -mcpu=cortex-m0 -mthumb -mabi=aapcs -DNRF51 -DBOARD_NRF6310 -DNRF51822_QFAA_CA --std=gnu99 -Wall -Werror -mfloat-abi=soft -DDEBUG -g3 -O0 -I"/Users/Eliot/dev/nrf51822/Include/ble" -I"/Users/Eliot/dev/nrf51822/Include/ble/softdevice" -I"/Users/Eliot/dev/nrf51822/Include/app_common" -I"/Users/Eliot/dev/nrf51822/Include/ble/ble_services" -I"../" -I"/Users/Eliot/dev/nrf51822/Include" -I"/Users/Eliot/dev/nrf51822/Include/gcc" -I"/Users/Eliot/dev/nrf51822/Include/ext_sensors" -M ../main.c -MF "_build/main.d" -MT _build/main.o
我的CDT项目配置包括屏幕,符号和工具链的屏幕截图如下:
https://dl.dropboxusercontent.com/u/12173473/screenshot_cdt_includes.png https://dl.dropboxusercontent.com/u/12173473/screenshot_cdt_symbols.png https://dl.dropboxusercontent.com/u/12173473/screenshot_cdt_toolchain.png
我没有使用工具链,因为我的项目最初是来自硬件制造商(Nordic Semiconductor)的样本CDT项目,该项目也没有配置工具链。说实话,我怀疑CDT找到了正确的gcc可执行文件。
答案 0 :(得分:4)
您的Eclipse项目必须反映与makefile相同的行为。
将make
的输出(即对gcc
的调用或您正在使用的任何编译器和链接器)与属性>中的Eclipse项目设置相匹配。 C / C ++ Build>设置。我将开始查看包含路径(-I
)和已定义的符号(-D
),然后查看其他标记。
不幸的是,Eclipse在从makefile导入项目时也不是很聪明,也不是从外部构建工具解析编译器和链接器设置。
答案 1 :(得分:0)
自应答。在没有在Eclipse中配置的适当工具链的情况下运行就是问题所在。对于使用cross gcc的ARM开发,这个Eclipse插件解决了我的问题并且看起来很有希望。它为您提供了整个工具链的Eclipse项目设置,这意味着您可以放弃makefile。