工具/软件:TI-RTOS
您好!
我的应用程序正在丢失 UDP 数据报。
AM437x 入门套件板通过网络开关连接到 PC。 PC 使用 JPERF 工具每隔大约1秒向端口60000发送128字节的 UDP 数据报。 PC 还运行 Wireshark 以检查数据报。 我的应用程序发回 UDP 数据报。 我可以看到、接收到的数据报数量与 PC 发送的数据报数量不匹配、反之亦然。 端口60000的 UDP 套接字永远不会返回错误。
应用程序有4个任务。 所有任务的优先级为1。 所有任务的堆栈大小为4096。 任务#1仅闪烁一个 LED。 tast #2从控制台侦听命令并转储统计信息。 任务#3以非阻塞模式调用 recvfrom()并生成(Task_yield ())。 任务#4在邮箱上挂起。 每当任务#3收到 UDP 数据报时,它就会向任务#4发送邮件,该任务将数据报发送回 PC。
cfg 文件中针对 IP 和 UDP 的所有设置都是默认设置。
以下是打开 UDP 套接字的函数:
int udpOpen (udp_handle self、uint32_t ipaddr、uint16_t port)
{
套筒垫;
struct sockaddr_in sockAddress;
int sockOption;
字符 ipStr[16];
INT 结果;
//创建套接字。
sock = NDK_socket (AF_iNet、SOCK_DGRAM、IPPROTO_UDP);
如果(sock == invalid_socket)
{
返回 EC_FAIL;
}
//将端口绑定到套接字
bzero (等位地址、sizeof (struct sockaddr_in));
sockAddress.Sin_Family = AF_iNet;
sockAddress.Sin_port =端口;
sockAddress.sin addr.s_addr = ipaddr;
结果= ndk_bind (sock、(struct sockaddr *)&sockAddress、sizeof (struct sockaddr_in));
if (socket_error ==结果)
{
返回 EC_FAIL;
}
//设置广播包的套接字选项。
sockOption = true;
结果= NDK_setsockopt (sock、SOL_socket、SO_broadcast、(void *)等选项、sizeof (int));
if (socket_error ==结果)
{
返回 EC_FAIL;
}
//非阻塞操作
sockOption = 0;
结果= NDK_setsockopt (sock、SOL_socket、SO_blocking、(void *)等选项、sizeof (int));
if (socket_error ==结果)
{
返回 EC_FAIL;
}
sockOption = 8192;
结果= NDK_setsockopt (sock、SOL_socket、SO_SNDBUF、等式选项、sizeof (int));
if (socket_error ==结果)
{
返回 EC_FAIL;
}
sockOption = 8192;
结果= NDK_setsockopt (sock、SOL_socket、SO_RCVBUF、等式选项、sizeof (int));
if (socket_error ==结果)
{
返回 EC_FAIL;
}
//成功。
self->localIpAddr = ipaddr;
self->localPort=端口;
self->socket = sock;
返回 EC_SUCCESS;
}// udpInit
我´ve 了"TI 网络开发者套件(NDK) v2.25用户指南"的第3.5.1节(常见问题疑难解答)、并且正在尝试调整我的应用。 我有几个问题:
CFGITEM_IP_SOCKUDPRXLIMIT 的含义是什么? NDK 编程人员参考指南仅显示“UDP/RAW 接收限制”。 它是 XGCONF 的 UDP -模块设置选项卡中的"UDP 接收缓冲区大小"属性吗?
XGCONF 的"IP -常规设置"选项卡上的"最小发送大小"(IP.socketBufMinTxSize)属性有何含义?
如何检查以太网设备驱动程序是否由于 RX 队列深度而丢弃数据包?
Nimu_osal.c 文件中的函数 OSAL_TaskCreate()将任务优先级设置为10。 是这样吗? n´t 低于 NetScheduler()?
"ips.CacheMiss 始终为1。 "IPS.Cache小姐"的含义是什么?
"ips.CacheMiss 始终为1。 "IPS.Cache小姐"的含义是什么?
已安装的组件:
CCS 7.2
GCC ARM 编译器4.9.3
PROCESSOR_SDK_RTOS_AM437X 4.00.04
AM437x PDK v1.0.7
BIOS 6.46.05.55
xdctools 3.32.02.25_core
电路板:AM437X 入门套件
此致、
Marcio。
已编辑:已添加通信统计信息。
PC 在端口60000上发送了1001个数据报,仅收到620个数据报。
IP 统计信息:
总接收数量: 965 被丢弃: 0
Badsum: 0 Badhlen: 0
Badlen: 0 收养: 0
Badvers: 0 正向: 0
NOPROTO: 0 delivered: 918
Cantforward: 0 CantforwardBa: 47.
过期: 0 重定向发送: 0
本地输出: 851 本地输出: 0
高速 缓存命中:850高速缓存未命中 :1.
碎片: 0 碎片丢弃: 0
碎片超时: 0 重新汇编: 0
碎片: 0 碎片: 0
CANTfrag: 0 滤波: 0
UDP 统计:
合计: 918
RcvShort: 0
RcvBadLen: 0
RcvBadSum: 0
RcvFull: 0
RcvNoPort: 0
RcvNoPortB: 67
SndTotal: 851
SndNoPacket:0
UDP 统计:
192.168.1.16:60000
数字 已发送消息: 851
数字 发送错误: 0
上次发送错误: 0
数字 接收的消息: 851
数字 接收错误: 0
最后一个接收错误: 0
这是_mmCheck 的返回:
12:48 (18%) 20:96 (62%) 2:128 ( 8%) 1:256 ( 8%)
3:512 (50%) 0:1536 0:3072
(15360/49152毫米分配:48/0/10、毫米波:0/0/0)
在512字节页中分配的3个块
在48字节页中分配了12个块
在128字节页中分配的2个块
在96字节页中分配了20个块
在256字节页中分配1个块