Arduino BLE 33开发中nrfx_glue.h空宏定义的疑问
nrfx_glue.h中空宏的作用与重定义场景
空宏的核心作用
这些空宏是nrfx驱动框架的模板占位符,目的是适配不同硬件平台、RTOS或自定义系统环境。nrfx作为Nordic的通用驱动层,要兼容裸机、FreeRTOS、Zephyr等多种运行环境,而不同环境下的中断配置逻辑差异极大——比如裸机直接调用NVIC接口,RTOS可能需要额外临界区保护,Arduino生态又有自己的封装逻辑。
留空这些宏是为了让上层驱动代码保持统一,不用因环境变化修改核心逻辑。驱动代码里直接调用NRFX_IRQ_PRIORITY_SET(...)这类宏,具体实现则由对应环境的适配层补全。
重定义的常见场景
你找不到定义,大概率是因为Arduino BLE 33的适配层把这些宏的实际实现藏在了其他头文件里,常见重定义位置包括:
- Arduino核心库针对nRF52840(BLE 33主控)的适配头文件,比如
nrf52840.h或专属中断封装文件 - 项目中的
nrfx_config.h配置文件,通常会在这里根据当前环境覆盖模板宏 - 第三方RTOS或框架的适配层,如果项目用到FreeRTOS,相关nrfx适配头会重写这些宏
举个实际重定义的例子:
裸机环境下,宏可能被定义为直接调用NVIC函数:
#define NRFX_IRQ_PRIORITY_SET(irq_num, priority) NVIC_SetPriority((irq_num), (priority)) #define NRFX_IRQ_ENABLE(irq_num) NVIC_EnableIRQ((irq_num))
RTOS环境下,可能会加上临界区保护:
#define NRFX_IRQ_PRIORITY_SET(irq_num, priority) \ do { \ taskENTER_CRITICAL(); \ NVIC_SetPriority((irq_num), (priority)); \ taskEXIT_CRITICAL(); \ } while(0)
查找Arduino BLE 33中的实际定义
你可以在Arduino安装目录的hardware/arduino/nrf52路径下搜索这些宏,重点查看cores/nRF5和variants/arduino_nano_33_ble文件夹里的头文件,比如variant.h或本地修改版的nrfx_glue.h——Arduino通常会对Nordic的原始模板做适配修改,把空宏替换为适合自身框架的实现。
内容的提问来源于stack exchange,提问作者tim p
相关产品推荐
相关产品推荐

