这是app炣task.c中的处理程序 int gapc U DISCONT\U ind U处理程序(ke U msg_UID\U t const msgid, 结构gapc_U断开\u ind const*param, 任务\u id\u const dest\u id, ke_task\u id\u t const src\u id) { 应用程序断开\u func(dest\u id,param);
从你的9篇文章来看,你的程序似乎要进行平台重置。您丢失调试器的事实是一个很强的迹象。我认为当外围设备超出范围或是分配内存而不释放内存时,您的内存将耗尽。我认为外围设备的消息正在堆积,直到监督超时,并且在调用gapc断开连接\u ind u处理程序之前发出平台重置。如果是这样,您必须在设备中实现某种流控制。
嗨,罗尼,
您不必将断开消息从设备发送到芯片……当设备在范围内时,您将使用GAPC断开连接(通过使用GAPC断开连接\u IND u handler())来断开连接,您可以将设备从该函数重新播发。
谢谢你的对话
如果我正确理解GAPC断开连接,则激活我的配置文件任务中的gap断开\u IND_处理程序。
顺便说一下,我们的解决方案基于sample128。
我在gap_UDisconnect\u ind_u处理程序中有一个断点。
当android应用程序断开连接时,我到达断点,但当设备超出范围时我不会到达断点。
在这种情况下,处理程序是否可能被激活?
谢谢
嗨,罗尼,
当外围设备超出范围时,应激活处理程序,原因为0x08。激活的处理程序是应用程序任务\u handlers.h中定义的gapc\u disconnect\u ind_处理程序。请尝试使用sample128项目的默认版本验证此操作。
谢谢你的对话
这是app炣task.c中的处理程序
int gapc U DISCONT\U ind U处理程序(ke U msg_UID\U t const msgid,
结构gapc_U断开\u ind const*param,
任务\u id\u const dest\u id,
ke_task\u id\u t const src\u id)
{
应用程序断开\u func(dest\u id,param);
返回(消耗的KE_MSG_U);
}
当android应用程序断开时我会到达,但当芯片超出范围时我不会到达那里
嗨,罗尼,
是的,这不应该发生,指示不应立即激活,而是在Supervision超时过期时激活。
如果在中心无法到达代码的地方停止调试?
请将断点放置在平台重置功能上,以查看代码是否结束在那里。
谢谢你的对话
平台重置在哪里?
在跳转表中找到它,但找不到代码。
嗨,罗尼,
你是否检查过外围设备从中央无法到达的代码的位置?
忘记提到您必须实现自己的自定义函数(my_UPlatform_UReset_ufunc),并替换跳转表中的平台reset_ufunc。然后在自定义函数中放置断点,以查看是否发出了平台重置功能。
谢谢你的对话
当超出范围时,程序停止。
拆卸在地址0
命令窗口有警告:
CPU无法停止
以及一系列:
jlink错误:cpu运行时无法读取寄存器xx
您有(my_UPlatform_UReset\u func)的实现示例,以查看它是如何实现的吗?
嗨,罗尼,
只需将跳转表中的常规函数替换为自定义函数,以便放置断点并捕获它。
从你的9篇文章来看,你的程序似乎要进行平台重置。您丢失调试器的事实是一个很强的迹象。我认为当外围设备超出范围或是分配内存而不释放内存时,您的内存将耗尽。我认为外围设备的消息正在堆积,直到监督超时,并且在调用gapc断开连接\u ind u处理程序之前发出平台重置。如果是这样,您必须在设备中实现某种流控制。
谢谢你的对话
尝试在跳转表.c中替换,但在生成时失败。
请告诉我在哪里换。
关于流量控制,我将尝试实现一个。
谢谢
取得了一些进展。
添加了我的重置函数,并调用,错误为0xf2f2f2f2
这是什么意思?
我想你解决了。
添加了一个逻辑,该逻辑计算应用程序发送的通知数和由配置文件发送的通知数。
当差异是9时,当android应用程序告诉我,我停止发送和恢复。
很好。
谢谢你的帮助