不确定如何处理以下情况:对话框运行良好,已连接到应用程序。当我们离开传感器和芯片时,RSSI会像预期的那样发生变化。突然之间,对话框似乎断开了连接,我们唯一能再次连接的方法就是重新启动设备。
当RSI水平太低时,我们可以从应用程序向芯片发送一条断开连接的消息,并告诉用户靠近一点,但是有没有更优雅的解决方案呢?谢谢
嗨,罗尼,
您不必从设备向芯片发送断开连接消息…当设备在范围内时,您将有一个GAPC\u DISCONNECT\u IND通过使用GAPC\u DISCONNECT\u IND\u处理程序()您可以从该函数重新公布您的设备。
谢谢你的对话
如果我理解正确,GAPC\u DISCONNECT\u IND将在我的配置文件任务中激活gap\u DISCONNECT\u IND处理程序。顺便说一句,我们的解决方案基于样本128。我在gap\u disconnect\u ind\u处理程序中有一个断点。我在android应用程序断开连接时到达断点,而不是在设备超出范围时。在这种情况下,处理程序是否可能在其他地方被激活?谢谢
当外设超出范围且原因为0x08时,应激活处理程序。激活的处理程序是gapc\u disconnect\u ind\u处理程序,如app\u task\u handlers.h中所定义。请尝试使用sample128项目的默认版本验证此操作。
这是app\u task.c中的处理程序int gapc\u disconnect\u ind\u处理程序(ke\u msg\u id\u t const msgid,结构gapc\u disconnect\u ind const*参数,任务id常量目标id,Keu任务\u id \u t const src \u id){app\u disconnect\u func(目标id,参数);
返回(已消耗的消息);}
当android应用程序断开连接时,我可以到达那里,但当芯片超出范围时,我无法到达那里
是的,这不应该发生,指示应该不是立即激活,而是在禁止超时过期时激活。
如果你停止调试时,中央是够不着的地方,代码结束?
请在platform\u reset函数中放置一个断点,以查看代码是否在那里结束。
站台复位在哪里?在跳转表中找到它,但找不到代码。
你有没有检查过当外围设备无法从中央连接到后,代码会去哪里?
忘了提到您必须实现自己的自定义函数(my\u platform\u reset\u func)并替换跳转表中的platform\u reset\u func。然后在自定义函数中放置一个断点,以查看是否发出了平台重置函数。
当超出范围时,程序停止。拆卸是地址0命令窗口有一个警告:cpu could not be halted以及一系列:jlink错误:在cpu运行时无法读取寄存器xx
你有没有一个实现(my\u platform\u reset\u func)的例子来看看它是如何实现的?
只需将跳转表中的普通函数替换为自定义函数,以便放置断点并捕获它。
从你的9篇文章来看,你的程序似乎要重新设置平台了。丢失调试器的事实是一个有力的迹象。据我所知,当外设超出范围时,您正在耗尽内存,或者您正在分配内存而没有释放内存。我假设来自外设的消息在监视超时之前一直堆积,并且在调用gapc\u disconnect\u ind\u处理程序之前发出平台重置。如果是这样的话,你必须在你的设备上实现某种流量控制。
尝试在跳转表.c中替换,但在生成时失败。请告诉我在哪里换。
关于流控制,我将尝试实现一个。谢谢
取得了一些进展。添加了我的重置函数,调用时出错=0xf2f2
这是什么意思?
我想你解决了。添加了逻辑,用于统计应用程序发送的通知数与配置文件发送的通知数。当差值为9时,当android应用程序告诉我时,我停止发送并继续发送。很好用。谢谢你的帮助
嗨,罗尼,
您不必从设备向芯片发送断开连接消息…当设备在范围内时,您将有一个GAPC\u DISCONNECT\u IND通过使用GAPC\u DISCONNECT\u IND\u处理程序()您可以从该函数重新公布您的设备。
谢谢你的对话
如果我理解正确,GAPC\u DISCONNECT\u IND将在我的配置文件任务中激活gap\u DISCONNECT\u IND处理程序。
顺便说一句,我们的解决方案基于样本128。
我在gap\u disconnect\u ind\u处理程序中有一个断点。
我在android应用程序断开连接时到达断点,而不是在设备超出范围时。
在这种情况下,处理程序是否可能在其他地方被激活?
谢谢
嗨,罗尼,
当外设超出范围且原因为0x08时,应激活处理程序。激活的处理程序是gapc\u disconnect\u ind\u处理程序,如app\u task\u handlers.h中所定义。请尝试使用sample128项目的默认版本验证此操作。
谢谢你的对话
这是app\u task.c中的处理程序
int gapc\u disconnect\u ind\u处理程序(ke\u msg\u id\u t const msgid,
结构gapc\u disconnect\u ind const*参数,
任务id常量目标id,
Keu任务\u id \u t const src \u id)
{
app\u disconnect\u func(目标id,参数);
返回(已消耗的消息);
}
当android应用程序断开连接时,我可以到达那里,但当芯片超出范围时,我无法到达那里
嗨,罗尼,
是的,这不应该发生,指示应该不是立即激活,而是在禁止超时过期时激活。
如果你停止调试时,中央是够不着的地方,代码结束?
请在platform\u reset函数中放置一个断点,以查看代码是否在那里结束。
谢谢你的对话
站台复位在哪里?
在跳转表中找到它,但找不到代码。
嗨,罗尼,
你有没有检查过当外围设备无法从中央连接到后,代码会去哪里?
忘了提到您必须实现自己的自定义函数(my\u platform\u reset\u func)并替换跳转表中的platform\u reset\u func。然后在自定义函数中放置一个断点,以查看是否发出了平台重置函数。
谢谢你的对话
当超出范围时,程序停止。
拆卸是地址0
命令窗口有一个警告:
cpu could not be halted
以及一系列:
jlink错误:在cpu运行时无法读取寄存器xx
你有没有一个实现(my\u platform\u reset\u func)的例子来看看它是如何实现的?
嗨,罗尼,
只需将跳转表中的普通函数替换为自定义函数,以便放置断点并捕获它。
从你的9篇文章来看,你的程序似乎要重新设置平台了。丢失调试器的事实是一个有力的迹象。据我所知,当外设超出范围时,您正在耗尽内存,或者您正在分配内存而没有释放内存。我假设来自外设的消息在监视超时之前一直堆积,并且在调用gapc\u disconnect\u ind\u处理程序之前发出平台重置。如果是这样的话,你必须在你的设备上实现某种流量控制。
谢谢你的对话
尝试在跳转表.c中替换,但在生成时失败。
请告诉我在哪里换。
关于流控制,我将尝试实现一个。
谢谢
取得了一些进展。
添加了我的重置函数,调用时出错=0xf2f2
这是什么意思?
我想你解决了。
添加了逻辑,用于统计应用程序发送的通知数与配置文件发送的通知数。
当差值为9时,当android应用程序告诉我时,我停止发送并继续发送。
很好用。
谢谢你的帮助