处理vs.回调函数

6个帖子/ 0新
最后一篇
阿林
离线
最后一次露面:4年1个月前
加入:2016-09-30 07:23
处理vs.回调函数

嗨对话框,

我不明白SDK中的句柄函数和回调函数之间的差异。
例如,在多链路演示中,存在函数bd_addr_write_cb(),并且在关联的服务中,dlg_ml是函数handle_write_req。两者都存储在dlg_ml中:

dlg_mls-> svc.write_req = handle_write_req;
dlg_mls-> addr_write_cb = addr_write_cb;

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

谢谢
arm

设备:
mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Arminl,

嗨Arminl,

回调函数是一段代码,该代码被传递给另一个函数作为参数,处理程序函数通常是作为对消息的响应执行的函数的那种。在您引用的特定代码上,通过作为概要初始化功能的参数传递回调函数。当触发与特定配置文件相关的BLE活动时,该回调函数用作处理程序。在它们被称为问题的情况下,这是BLE_ADAPTET作业,并根据与执行的BLE操作相关的服务处理。因此,例如,如果将Central写入特定服务,则将调用Handle_Write_Req()。handle_write_req()(配置文件本身实现的处理程序)将检查写在特定句柄(EVT->句柄== DLG_MLS-> Periph_addr_Val_h)上执行写入,如果这是真的,则句柄_peripheral_address_write()将调用您使用的回调函数才能忘记配置文件(BD_ADDR_WRITE_CB_T ADDR_WRITE_CB)。如果您的意思是何时打遍回调函数,并且何时使用配置文件定义的特定处理程序,则我没有得到“何时使用句柄函数和回调函数”

谢谢mt_dialog.

阿林
离线
最后一次露面:4年1个月前
加入:2016-09-30 07:23
非常感谢细节

非常感谢详细描述。

与handle_write_req()相关:ble_gatts_set_value()和ble_storage_put_u32()/ ble_storage_put_buffer()/ ...?根据标题文件中的相应描述,所有这些函数在内部数据库中设置值。因此,如果发生写请求,这是存储属性数据库中的值的最佳方法?

谢谢
arm

mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Arminl,

嗨Arminl,

BLE_GATTS_SET_VALUE()存储BLE堆栈的内部属性数据库中的值,BLE_STORAGE_PUT_U32()&BLE_STORAGE_PUT_BUFFER()如果调用它们存储闪存中的属性值,以便始终了解属性的状态每次可用连接。大多数配置文件都使用BLE_STORAGE_PUT_U32(),以便“记住”如果中央启用通知,因此这些功能具有不同的功能。因此,如果您想存储数据库中的上升值,则BLE_GATTS_SET_VALUE()是您应该使用的功能。

谢谢mt_dialog.

阿林
离线
最后一次露面:4年1个月前
加入:2016-09-30 07:23
嗨mt_dialog,

嗨mt_dialog,

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

谢谢
arm

mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Arminl,

嗨Arminl,

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

谢谢mt_dialog.