句柄与回调函数

6个员额/0个新员额
最后一篇文章
阿米尔
离线
最后一次见到:4年4个月前
加入:2016-09-30 07:23
句柄与回调函数

嗨,对话,

我不理解SDK中句柄函数和回调函数之间的区别。
例如,在多链接演示中,有一个函数bd_addr_write_cb(),在关联的服务dlg_ml中有一个函数handle_write_req。两者都存储在dlg_mls中:

dlg_mls->svc.write_req=handle_write_req;
dlg\u mls->addr\u write\u cb=addr\u write\u cb;

何时使用句柄函数和何时使用回调函数?软件如何调用它们?
我想了解这一点,因为我构建了一个定制服务。

谢谢
阿明

设备:
MT_对话框
离线
最后一次见到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨,阿米尔,

嗨,阿米尔,

回调函数是一段作为参数传递给另一个函数的代码,处理函数通常是作为消息响应执行的函数。在引用的特定代码段中,回调函数作为参数传递给概要文件初始化函数。当触发与特定概要文件相关的可恢复活动时,此回调函数用作处理程序。在如何调用它们的问题中,这是ble_适配器作业,并根据与执行的ble操作相关的服务处理该作业。因此,例如,如果中心向特定服务写入数据,则会调用handle_write_req()。handle_write_req()(由概要文件本身实现的处理程序)将检查写入是否在特定的句柄(evt->handle==dlg_mls->periph_addr_val_h)执行,如果这是真的,handle_peripheral_address_write()将调用您用来初始化概要文件的回调函数(bd_addr_write_cb_t)addr_write_cb)。如果您指的是何时传递回调函数以及何时使用由概要文件定义的特定处理程序,那么我不知道“何时使用句柄函数和何时回调”,这是特定于应用程序的。

谢谢你的对话

阿米尔
离线
最后一次见到:4年4个月前
加入:2016-09-30 07:23
非常感谢您提供的详细信息

非常感谢您的详细描述。

与handle_write_req()相关:ble_gatts_set_value()和ble_storage_put_u32()/ble_storage_put_buffer()之间有什么区别?根据头文件中的相应描述,所有这些函数在内部数据库中设置一个值。所以,如果发生写请求,哪种方法是将值存储在属性数据库中的最佳方法?

谢谢
阿明

MT_对话框
离线
最后一次见到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨,阿米尔,

嗨,阿米尔,

ble_gatts_set_value()将值存储在ble堆栈的内部属性数据库中,ble_storage_put_u32()和ble_storage_put_buffer()如果调用,则将属性值存储在闪存中,以便您可以随时了解每个可用连接的属性状态。大多数配置文件都使用ble_storage_put_u32()来“记住”通知是否由中心启用,以便这些函数具有不同的功能。因此,如果要在数据库中存储upcomming值,则应使用ble_gatts_set_value()函数。

谢谢你的对话

阿米尔
离线
最后一次见到:4年4个月前
加入:2016-09-30 07:23
嗨,MT_dialog,

嗨,MT_dialog,

哪个内存存储BLE堆栈的内部属性数据库?在睡眠模式下,数据库会发生什么变化?

谢谢
阿明

MT_对话框
离线
最后一次见到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨,阿米尔,

嗨,阿米尔,

数据库在运行时在系统RAM堆中分配,在睡眠期间保留。

谢谢你的对话