硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1878|回复: 4
收起左侧

[ThreadX全家桶] ThreadX NetXDUO回调函数方式接收数据的玩法非常不错,这样就跟TCPnet差不多了

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115863
QQ
发表于 2022-1-15 09:16:00 | 显示全部楼层 |阅读模式


比如创建一个TCP回调:
  1.          nx_tcp_socket_receive_notify(&TCPSocket[i],
  2.                                       my_receive_notify);
复制代码


回调函数处理:
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: NetXTest
  4. *        功能说明: TCPnet应用
  5. *        形    参: 无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */                                            
  9. void my_receive_notify(NX_TCP_SOCKET *socket_ptr)
  10. {
  11.     UINT status;
  12.     UINT ret;
  13.     ULONG socket_state;
  14.     UINT old_priority;
  15.     int i;

  16.     NX_PACKET *RecPacket;
  17.     NX_PACKET *TraPacket;

  18.     ULONG bytes_read;
  19.     static uint32_t count = 0;
  20.        
  21.         ULONG peer_ip_address;
  22.         ULONG peer_port;
  23.     uint8_t sendbuf[20];
  24.    
  25.      ret = nx_tcp_socket_receive(socket_ptr,     /* TCP Socket控制块 */
  26.                                               &RecPacket,    /* 接收到的数据包 */
  27.                                                   0);        /* 永久等待 */
  28.    
  29.         /* 获取客户端的IP地址和端口 */
  30.     nx_tcp_socket_peer_info_get(socket_ptr,       /* TCP Socket控制块 */
  31.                                 &peer_ip_address, /* 远程IP地址 */
  32.                                 &peer_port);      /* 远程端口号 */
  33.    

  34.     /* 获取客户端发来的数据 */
  35.     nx_packet_data_retrieve(RecPacket,    /* 接收到的数据包 */
  36.                             data_buffer,    /* 解析出数据 */
  37.                             &bytes_read);   /* 数据大小 */

  38.     /* 打印接收到数据 */
  39.     PRINT_DATA(peer_ip_address, (unsigned int)peer_port, data_buffer);
  40.    
  41.     nx_packet_release(RecPacket);
  42.    
  43.     /* 申请发送数据包 */
  44.     ret = nx_packet_allocate(&pool_0, &TraPacket, NX_TCP_PACKET, 0);

  45.     if (ret)
  46.     {
  47.         Error_Handler(__FILE__, __LINE__);  
  48.     }

  49.     sprintf((char *)sendbuf, "sendbuf = %d\r\n", count++);
  50.    
  51.     /*将要发送的数据附加到TraPacket */
  52.     ret = nx_packet_data_append(TraPacket, (VOID *)sendbuf, strlen((char *)sendbuf), &pool_0, 0);

  53.     if (ret)
  54.     {
  55.         Error_Handler(__FILE__, __LINE__);
  56.     }

  57.     /* 发送数据,注意发送后,此函数会释放数据包 */
  58.     ret =  nx_tcp_socket_send(socket_ptr,   
  59.                                TraPacket,      
  60.                                0);
  61.    
  62.     if (ret)
  63.     {
  64.         Error_Handler(__FILE__, __LINE__);
  65.     }

  66. }
复制代码


回复

使用道具 举报

4

主题

1447

回帖

1459

积分

至尊会员

积分
1459
发表于 2022-1-15 09:48:45 | 显示全部楼层
回复

使用道具 举报

2

主题

79

回帖

85

积分

初级会员

积分
85
发表于 2022-1-15 19:01:05 | 显示全部楼层
我年纪小,入门的晚,现在只用threadx全家桶了,lwip,ucos什么听说但没用过
回复

使用道具 举报

3

主题

83

回帖

92

积分

初级会员

积分
92
发表于 2022-6-26 15:35:11 | 显示全部楼层
我测试了一下,如果用这种回调函数方式接收数据的话,上位机主动断开/连接几次后就无法收到数据了
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-9-8 14:15:27 | 显示全部楼层
nx_tcp_socket_send 如果发送失败就不会释放数据包,所以失败处理中要加一个手动释放数据包。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-24 00:51 , Processed in 0.242791 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表