Hi Dialog,
目前我正在使用GAPM_GEN_STORATIC_RND_ADDR配置的BLE_BAREBONE示例,我想通过UART将随机生成的BD地址通过UART到共同处理器一旦广告开始,您可以建议阅读随机BD地址的任何方法吗??
我尝试过以下操作:
void user_app_adv_start(void)
{
struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_undirected_advertise_get_active();
memcpy (bd_address cmd - > op.addr.addr, 6);
app_easy_gap_undircated_advertise_start();
}
But I always received all zeros .
谢谢 ,
Regards,
Dhiraj.
设备:
嗨Dhirajp15,
由于您已将设备配置为Gapm_gen_static_rnd_addr,因此您应该生成静态随机BD地址。似乎你用正确的方式阅读了BD地址。我建议您调试代码并检查BD_Address变量是否包含通过UART打印之前的BD地址或零。您可以在代码的memcpy(bd_address,cmd-> op.addr.addr,6)中添加一个断点,并检查BD地址是否复制匹配广告期间使用的BD地址。
谢谢pm_dialog.
嗨pm_dialog,
我在memcpy(bd_address,cmd-> op.addr.addr,6)中添加了一个断点,并检查了它显示零的值。同时在CMD-> OP.ADDR.ADD中保留Watch,该DDR包含随机生成的蓝牙地址,它显示ZERO,而user_app_adv_start()函数正在执行,并且它在执行后显示实际值。
谢谢,
Regards,
Dhiraj.
嗨Dhirajp15,
我在SDK的BLE_APP_BAREBONE项目中测试了它。我将GAPM_GEN_STODIC_RND_ADDR定义为user_adv_conf结构的ADDR_SRC成员,我能够生成静态随机BD地址。您在哪个项目工作?您的代码执行生成_static_random_address()函数是否已分配到App_easy_gap_undircated_advertise_start_create_msg()函数中?一旦您将设备配置为Gapm_gen_static_rnd_addr,您的应用程序代码应该执行生成_static_random_address()函数。我建议您将断点添加到代码的那个地方,然后通过使用面板的“呼叫堆栈窗口”来检查BD地址。此外,我建议您检查代码的优化是否在ove-o0中,如果-o3可能会优化代码,它不会向您展示数组的实际值。单击“项目”选项卡,然后单击“目标选项”。在“打开”窗口中,转到“C / C ++”选项卡,将优化选项更改为level0(-o0)。
谢谢pm_dialog.
嗨pm_dialog,
我在项目中查找函数生成_static_random_address()。我正在研究SDK 5.0.2.1。还要使用Call Stack窗口检查Op.Addr.Addr的值为零。还向您发送了keil窗口的屏幕截图,我已经将优化设置为O0进行调试目的。请尽快帮助解决此问题。
PFA。
谢谢 ,
Regards,
Dhiraj.
嗨Dhirajp15,
您正在处理的SDK5.0.2.1是一个过时的版本。在此SDK中,当您将设备配置为GAPM_GEN_STORATIC_RND_ADDR时,BD地址是从BLE堆栈生成的,并且每次设备通告时都会更改。所以它是随机的BD地址,但不是静态。它有望在BD地址中收到零,您已发布的代码,因为如上所述,从堆栈中生成BD地址,您将无法使用所发布的方式读取它。它强烈建议使用最新版本的SDK(SDK5.0.4),其中SDK完成了静态随机BD地址生成。如果将设备配置为GapM_GEN_STORATIC_RND_ADDR,则此版本的SDK使用生成_static_random_address()函数来生成静态随机BD地址。如果有必要使用SDK5.0.2.1,我建议您将SDK5.0.4的实现执行并将其嵌入到您的应用程序代码中。
谢谢pm_dialog.