【填坑指南】[Nordic] SWI2_EGU2_IRQHandler multiply defined

现象

在我们使用Nordic的nrf5_SDK进行开发时,如果要使用freeRTOS,一般会从例子中的examples\ble_peripheral\ble_app_hrs_freertos开始。

在宏定义中NRF_SDH_DISPATCH_MODEL可以选择三种:

// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT 
// <1=> NRF_SDH_DISPATCH_MODEL_APPSH 
// <2=> NRF_SDH_DISPATCH_MODEL_POLLING 

如果我们不更改,按照默认的设置NRF_SDH_DISPATCH_MODEL_POLLING 则可以接着往下开发。
如果我们将其更改为NRF_SDH_DISPATCH_MODEL_POLLING 后,就会提示Symbol SWI2_EGU2_IRQHandler multiply defined的错误。

// <h> Dispatch model 

// <i> This setting configures how Stack events are dispatched to the application.
//==========================================================
// <o> NRF_SDH_DISPATCH_MODEL
 

// <i> NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context.
// <i> NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler.
// <i> NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually.
// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT 
// <1=> NRF_SDH_DISPATCH_MODEL_APPSH 
// <2=> NRF_SDH_DISPATCH_MODEL_POLLING 

#ifndef NRF_SDH_DISPATCH_MODEL
#define NRF_SDH_DISPATCH_MODEL 0
#endif

// </h> 
.\_build\nrf52832_xxaa.axf: Error: L6200E: Symbol SWI2_EGU2_IRQHandler multiply defined (by nrf_sdh_freertos.o and nrf_sdh.o).
  • keil编译在这里插入图片描述
  • GCC编译在这里插入图片描述

原因分析

实际上SWI2_EGU2_IRQHandler是SD_EVT_IRQHandler 经过多次重定义的原始值。
所以,重定义的是void SD_EVT_IRQHandler(void)这个函数。

解决方法

注释掉其中的一个void SD_EVT_IRQHandler(void)即可。

因为这个回调最终都是调用的nrf_sdh_evts_poll();,所以保留一个即可。
我的改法如下:
加入判断FREERTOS开关的一个宏定义来决定是否使用nrf_sdh.c里的SD_EVT_IRQHandler。

#if (NRF_SDH_DISPATCH_MODEL == NRF_SDH_DISPATCH_MODEL_INTERRUPT)
#if !defined(FREERTOS) // 在不使用freeRTOS时开启
void SD_EVT_IRQHandler(void)
{
    nrf_sdh_evts_poll();
}
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值