句柄与回调函数

6个职位/ 0个新职位
最后发表
ArminL
离线
最后看到:4年1个月前
加入: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_mls - > addr_write_cb = addr_write_cb;

我什么时候使用句柄函数,什么时候使用回调函数?它们是如何被软件调用的?
我想理解这一点,因为我建立了一个自定义服务。

谢谢
阿明

设备:
MT_dialog
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨ArminL,

嗨ArminL,

回调函数是作为参数传递给另一个函数的一段代码,处理函数通常是作为对消息的响应执行的那种函数。在您引用的特定代码段中,回调函数作为参数传递给概要文件初始化函数。当触发与特定配置文件相关的BLE活动时,这个回调函数被用作处理程序。在它们如何被称为问题中,这是ble_adapter作业,并根据与执行的BLE操作相关的服务来处理它。因此,例如,如果一个中央写到一个特定的服务,handle_write_req()将被调用。handle_write_req()(处理程序实现的概要文件)将检查如果写了在一个特定的处理(evt - >处理= = dlg_mls > periph_addr_val_h),如果这是真的handle_peripheral_address_write()将调用回调函数,你已经为了initalize概要(bd_addr_write_cb_t使用addr_write_cb)。我不知道“何时使用句柄函数和何时回调”,如果你的意思是何时传递回调函数和何时使用由配置文件定义的特定处理程序,这是应用程序特定的。

由于MT_dialog

ArminL
离线
最后看到:4年1个月前
加入:2016-09-30 07:23
非常感谢您提供的详细信息

非常感谢详细的描述。

ble_gatts_set_value()和ble_storage_put_u32()/ble_storage_put_buffer()/…?根据头文件中各自的描述,所有这些函数都在内部数据库中设置了一个值。那么,如果发生写请求,在属性数据库中存储值的最佳方法是什么呢?

谢谢
阿明

MT_dialog
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨ArminL,

嗨ArminL,

ble_gatts_set_value()商店的内部属性数据库中的值BLE堆栈的ble_storage_put_u32 () & ble_storage_put_buffer()如果他们在flash存储属性值,所以你总是可以意识到你的可用属性为每个连接的状态。大多数配置文件都使用ble_storage_put_u32()来“记住”中央是否启用了通知,因此这些函数具有不同的功能。因此,如果您想在数据库中存储即将到来的值,那么应该使用ble_gatts_set_value()函数。

由于MT_dialog

ArminL
离线
最后看到:4年1个月前
加入:2016-09-30 07:23
嗨MT_dialog,

嗨MT_dialog,

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

谢谢
阿明

MT_dialog
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨ArminL,

嗨ArminL,

数据库是在运行时在系统RAM的堆中分配的,在休眠时保留它。

由于MT_dialog