false

false

EN

SDK内部出错APP_E: (ke_task.c Line:189) [PARAM] Param0:265,Param1:3093 【已解决】

Angelo

2021-09-05 09:48:40

我在测试测试gus, gus_c主从一体化的时候,发现不同次序的连接后发送数据会导致SDK内部出错,APP_E: (ke_task.c Line:189) [PARAM] Param0:265,Param1:3093,这是打印日志。这部分代码我看不到,能否确认一下什么问题能导致这个断言?

热门 最新

11个回答
最佳答案

fanbo

2021-09-07 15:09:44

Hi 

        1.你说的没错,是这样理解。

        2.其实实现上我们连接索引是统一管理的,并不区分client 和server 端。连接顺序不同,导致连接索引不一致,特别是作为主从一体设备来说。从协议栈角度上,client和server角色是不固定的,也和master 和slave 没有依赖关系。我们无法记录client 和server 有多少个连接,因此,协议栈实现上并不会区分client 和server 支持的连接数,只做连接索引和最大支持连接数一般检查。所以这里示例中profile 中设置都会和custom config中的定义一致。

        

          3. 如果你要维持9条连接,请尽量不要使用相同的 connection interval,尽量使所有 connection  interval 的公倍数尽可能的少,这样更不容易断连。

4条评论

您的评论

fanbo

2021-09-06 13:39:07

HI

初步怀疑是你没有按照规范调用ble的api导致协议栈调度出错,你能不能更详细的描述你的应用场景,以及能否将代码同步给我们,以便更快的定位问题,谢谢。

0条评论

您的评论

Angelo

2021-09-06 13:48:23

我很乐意共享这部分代码给你们,我们这个项目是蓝牙网关,SDK的稳定很关键。由于这个问题要重现,需要一个相关的从机配合,我也可以提供环境,看看怎么来调试这个问题(100%重现)呢?我们现在的代理商是深圳德瑞迪,是通过他们联系吗?或者你们也可以直接联系我13823641660, 周工。

0条评论

您的评论

Angelo

2021-09-06 13:48:23

我很乐意共享这部分代码给你们,我们这个项目是蓝牙网关,SDK的稳定很关键。由于这个问题要重现,需要一个相关的从机配合,我也可以提供环境,看看怎么来调试这个问题(100%重现)呢?我们现在的代理商是深圳德瑞迪,是通过他们联系吗?或者你们也可以直接联系我13823641660, 周工。

0条评论

您的评论

fanbo

2021-09-06 15:19:12

请你检查一下 ble_server_prf_add()参数中的 “max_connection_nb”

如果支持多连接,这里请设置对应的最大支持连接数。


 另外, 如果profile client端 也是使用我司芯片。profile client对应的client 注册时候设置的参数 也检查下。  





2条评论

您的评论

Angelo

2021-09-06 22:53:23


范工,确实如你们所说,我发现这种配置下出现了问题。当我把GUS_CONNECTION_MAX改为2,问题消失。但是按道理贴图的配置按道理是我的实际需求,而且测试的时候,主设备和从设备都是各一个相连,难道是我对于这两个宏定义的理解有误?GUS_C_CONNECTION_MAX,我的理解是可以同时长连接8个从设备;GUS_CONNECTION_MAX,我的理解是同时长连接1个主设备(手机)。所以我认为CFG_MAX_CONNECTIONS最大链接数应该为:8+1=9。但是从这个结果看来,我觉得好像这三个宏定义好像都是表示连接总数。理解对吗?谢谢!

0条评论

您的评论

fanbo

2021-09-07 10:15:06

HI, 你的贴图应该是来自于 custom_config.h ?

原本的形式应该如下:

// <o> Support maximum number of BLE Links <1-10>
// <i> Range: 1-10
#ifndef CFG_MAX_CONNECTIONS
#define CFG_MAX_CONNECTIONS 10
#endif

所以我理解GUS_CONNECTION_MAX/GUS_C_CONNECTION_MAX ,应该是你自定义的。

1.我解释一下,这里的CFG_MAX_CONNECTIONS 并不区分主从,因为对于蓝牙来讲,不管是master还是slave,调度的方式和开销的资源都是差不多的,最大区别只是以谁的时钟最为基准。至于我们为什么要把“支持的最大连接数”交由用户来配置,是因为不同的应用场景下,需要的连接数是不同的,该宏配置的越小,协议栈分配给蓝牙连接的资源越小,以便有更多的资源分配到用户需要的场景。所以这个宏CFG_MAX_CONNECTIONS 需要配置为该设备最大支持多少个连接,不区分主从。

2.另外,在gus.h中有这样一段定义

#define GUS_CONNECTION_MAX      (10 < CFG_MAX_CONNECTIONS ?\
10 : CFG_MAX_CONNECTIONS) /**< Maximum number of Goodix UART Service connections. */

从宏的定义可知,不能超过 CFG_MAX_CONNECTIONS,且这个宏是用于注册profile。


3.以下是对于你们问题的分析:

因为你们现在是作为主从一体的设备,如果先和 Nordic 从机建立连接(连接索引 0)后再和手机建立连接,那么手机建立连接上报的索引应该是1。否则,手机作为第一个设备建立连接对应的索引号是0,两种方式下手机建连对应的索引号不一致。然后手机作为第二个设备建立的话,连接索引是 不小于 profile 注册指定的 max_connection_nb,这时候会assert。所以,如果作为主从一体设备支持多连接场景下,profile支持的最大连接数应该设置为本端设备实际连接最大个数(2个连接),不管是第几个建连设备给本端发送消息,这样可以覆盖不同连接顺序的情况。



0条评论

您的评论

Angelo

2021-09-07 11:21:25

我大致明白你们的意思了。但是我现在比较混淆的是你们对于三个宏的定义的理解。先说说我自己的理解:

  CFG_MAX_CONNECTIONS 9: 表示无论主从一共不能超过9个连接数

GUS_C_CONNECTION_MAX 8  从字面理解我认为:客户端(client)最多可以接受8个Server的连接

GUS_CONNECTION_MAX 1 : 从字面理解我认为:Server最多可以接受1个Clinet的连接

因此 CFG_MAX_CONNECTIONS定义成9个的意思就是8+1=9, 总共主从一共9个。


但是按你的解释: GUS_CONNECTION_MAX这个宏不能小于2,这一点我不太理解。是不是这个宏的字面意思不太对呢?

多谢!

0条评论

您的评论

fanbo

2021-09-07 14:06:11

HI

1. CFG_MAX_CONNECTIONS  这个宏 应该是定义在custom_config.h的,表示该设备支持最大的连接数,目前你的应用场景有两条连接,①和nordic一条②和手机一条,所以这个宏目前至少定义为2;另外,根据注释,这个宏最大可以支持到10.


2. GUS_C_CONNECTION_MAX  、GUS_CONNECTION_MAX分别是定义在profiles文件夹下的 gus.h和 gus_c.h;他们不能超过 CFG_MAX_CONNECTIONS 这个应该比较好理解; 我不知道你为什么会把这两个宏搬移到 custom_config.h中,并且认为他们相加等于 CFG_MAX_CONNECTIONS。

1条评论

您的评论

Angelo

2021-09-07 14:41:14


我是受Nordic的这个配置影响了,由此看Goodix的这两个宏用法不一样。回到问题的原点,如果我想实现总共9个连接, CFG_MAX_CONNECTIONS定义为9。那么其他的两个宏 GUS_C_CONNECTION_MAX  、GUS_CONNECTION_MAX是不是也应该定义9就好,我的理解对吧?  

0条评论

您的评论

共 11条记录
1 2 >

您的回答