nrf52832增加fds模块遇到的问题

本文详细解析了在使用nRF52 SDK进行FDS模块初始化时遇到的事件未触发问题,通过调整初始化顺序和配置,最终解决了FDS_EVT_INIT事件无法正常触发的难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求大概这样:先初始化fds,然后通过fds在flash读出我上次存储的内容,代码参考自demo flash_fds

我的代码大概长这样:

	ret_code_t ret = fds_register(my_fds_evt_handler);//注册一个自己的回调函数,参考自demo
	if (ret != NRF_SUCCESS)
	{
		//print info
			
	}
	ret = fds_init();//初始化 这里会发送一个 FDS_EVT_INIT事件给my_fds_evt_handler
	if (ret != NRF_SUCCESS)
	{
		//print info
	}
	/*
    如果失败了 做些处理
    */
    wait_for_fds_ready();等待FDS_EVT_INIT事件执行

然后发现wait_for_fds_ready居然死等,奇怪的是我复位几次又好了。在sdk12的时候我也这么整啊怎么没这问题?反正看了好久,我的代码是在demo上的某个ble的程序改过来的,用了scheduler_init,然后这个事件一直没产生是咋回事,过去好几个月了忘记当时怎么整的好像移动了初始化的位置然后发现可以了,然后就在上面的fds初始化函数里加了app_sched_execute(),然后上面那个不产生的事件就产生了,在SDK12的时候我把scheduler关掉了都没看出问题。然后我就跳过这个模块可能运气比较好我马上又遇到了一个l报错的问题,根据这个报错的问题我发现了一个宏,下面是这个宏的注释,在sdk_config.h里:

// <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

由于当时设置了1,所以导致没调度开始就触发不了这个事件,想起我之前把调度关了就跑不起来了....然后在fds初始化之前初始化了协议栈ble_stack_init,初始化协议栈后再初始化fds模块就解决了这个问题。

 

如果你遇到了跟我一样的问题就给我点个赞呗^ ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值