Vmao 发表于 2018-1-11 19:52:34

NRF SDK14协议栈里有个奇怪的C用法

一个C文件里调用如下
NRF_SDH_BLE_OBSERVER(m_ble_observer, BSP_BTN_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);

在一个.h文件里定义
#define NRF_SDH_BLE_OBSERVER(_name, _prio, _handler, _context)                                    \
STATIC_ASSERT(NRF_SDH_BLE_ENABLED, "NRF_SDH_BLE_ENABLED not set!");                                 \
STATIC_ASSERT(_prio < NRF_SDH_BLE_OBSERVER_PRIO_LEVELS, "Priority level unavailable.");             \
NRF_SECTION_SET_ITEM_REGISTER(sdh_ble_observers, _prio, static nrf_sdh_ble_evt_observer_t _name) =\
{                                                                                                   \
    .handler   = _handler,                                                                        \
    .p_context = _context                                                                           \
}

另一个C文件

NRF_SDH_STACK_OBSERVER(m_nrf_sdh_ble_evts_poll, NRF_SDH_BLE_STACK_OBSERVER_PRIO) =
{
    .handler   = nrf_sdh_ble_evts_poll,
    .p_context = NULL,
};



感觉真是绕啊,兜了这么一圈难道其实就是调用nrf_sdh_ble_evts_poll 这个函数????熟悉的大神请给解释一下

wye11083 发表于 2018-1-11 20:36:32

这是为了实现跨平台移植,因为内核只要去调.handler就行了,不用管你是哪个平台的什么东西。

了无 发表于 2018-1-11 20:39:57

坐等大神
页: [1]
查看完整版本: NRF SDK14协议栈里有个奇怪的C用法