【发布时间】:2013-12-01 19:48:33
【问题描述】:
我有一个嵌入式 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 可执行文件。
【问题讨论】:
-
将 app_button_evt_schedule 函数移到 APP_BUTTON_INIT 之前,或者提供前向声明。
-
将 app_button_evt_schedule 移到标题中的 APP_BUTTON_INIT 之前没有效果。
-
我会考虑检查以下解决方案:stackoverflow.com/a/24981627/1161594 为我工作。
-
那个解决方案是指MinGW。我在 Mac 上。
标签: c eclipse eclipse-cdt