nrf52832增加fds模块遇到的问题

需求大概这样:先初始化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模块就解决了这个问题。

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

发布了11 篇原创文章 · 获赞 0 · 访问量 105

猜你喜欢

转载自blog.csdn.net/weixin_39945910/article/details/104070456
今日推荐