问题描述
-
长时间(1h、8h(添加了部分log)不等)传输音频数据,出现ARM无法ping通DSP的情况,音频数据不能收发、DSP接收不到ARM发送的配置数据,shell task无响应;
-
无任何Core0上的log输出,只有Core1上的log输出;
-
通过接入调试器会触发GateMutex 的断言直接挂起(如下图);
解决期望:
1. 是否存在NDK设置参数或者网络初始化相关的参数错误,帮忙指出;
2.现阶段无有效手段对网络崩溃情况进行定位分析,是否有手段进行定位;
3.是否遇到类似的情况,可以提供相关案例做参考;
系统方案
说明:
-
ARM端和DSP端通过网络进行通讯,整体上分为TCP和UDP传输:
-
TCP:传输音频配置数据和升级数据包;
-
UDP:传输心跳包和音频数据数据;
-
DSP端创建多个Task对配置数据、音频数据进行收发、处理;两个核心之间采用FIFO进行同步传输
核心 |
Task名称 |
Task描述 |
优先级 |
Stack 大小 |
0 |
Main Task |
进行双核共用资源的初始化,如FIFIO |
11 |
8192 |
Network Init Task |
网络初始化,SGMII,NC_NetStart |
9 |
8192 |
|
LitteShell Task |
移植的开源litte shell,串口收发 |
6 |
8192 |
|
Config Recv&Send Task |
通过TCP对音频配置数据进行收发,并写入配置数据的fifo, |
5 |
8192 |
|
Config Decode Task |
检测到配置数据的fifo后,按照协议进行解析,解析后将结果写入双核通讯的配置fifo中 |
4 |
8192 |
|
Upgrade Data Trans Task |
通过TCP传输升级包数据 |
3 |
8192 |
|
Upgrade Task |
升级包接收完成后,执行升级操作 |
2 |
8192 |
|
Heartbit Recv&Send Task |
通过UDP对心跳数据进行收发,确认网络处于一直连接的状态 |
8 |
8192 |
|
Audio Recv Task |
通过UDP接收音频数据,并按RTP协议进行解析,并写入到双核通讯的音频fifo中 |
7 |
8192 |
|
Audio Send Task |
一直去同步双核通讯的音频fifo,有数据就读出音频数据,并将音频数据进行分包、RTP编码通过UDP发送 |
7 |
8192 |
|
1 |
Algo Task |
1,读取配置fifo,有数据就进行配置数据的解析,解析出真实配置数据,给到算法进行处理 2,不断读取音频输入fifo,有数据就读取音频数据,再根据配置数据进行对应的算法处理,处理完,将音频数据写入到音频输出fif |
10 |
8192 |
开发环境描述
-
Windows下开发
-
调试器:XDS200
网络相关配置
SGMII 寄存器 |
值 |
|
SGMII SerDes PLL Configuration Register |
0x00000051 |
|
SGMII SerDes Receive Configuration Register 0 |
0x00700621 |
|
SGMII SerDes Transmit Configuration Register 0 |
0x000108A1 |
|
NC_NetCfg |
值 |
描述 |
CFGITEM_IP_SOCKTCPTXBUF |
64000 |
TCP Transmit buffer size |
CFGITEM_IP_SOCKTCPRXBUF |
64000 |
TCP Receive buffer size (copy mode) |
CFGITEM_IP_SOCKTCPRXLIMIT |
64000 |
TCP Receive limit (non-copy mode) |
CFGITEM_IP_SOCKUDPRXLIMIT |
64000 |
UDP Receive limit |
网络socket和数据量
目前在上述背景下,开发的网络应用启用了 4 个 socket,分别如下:
‒ 心跳功能:UDP socket,每 5s 一次传输,payload 约为 10Byte
‒ 音频数据:UDP socke(2个socket 发送和接收socket)t,每 2ms 一次传输, payload约为15,400字节
‒ 配置数据:TCP socket,不定时产生传输,payload 最多 9600 字节
‒ 升级数据:TCP socket,升级时进行传输,payload 和升级有关,一次 2K 字节