- [b]一、测试环境:[/b]
- 硬件官方开发板:ESP32_DevKitc_V4
- IDF 的具体版本:ESP-IDF v4.0.1
- 开发环境: Windows
- 软件工程:使用BSD Socket API Example 官方工程。修改了udp_client.C的应用内容。 menuconfig 做配置更改
- 使用 官方的BSD Socket API Example(:\esp-idf\examples\protocols\sockets\udp_client\main\udp_client.c(如附件udp_client.c,工程配置如(sdkconfig".txt")))
- [b]二、代码出现的问题:[/b]
- sendto会随机出现return -1 的现象。
- 错误long errno:12 。/* Not enough space */
- [b]三、提问问题:[/b]
- 可以从串口打印中知道,报错 errno:12 时 send82493 errno:5 /hmi : 204580 /fh : 205240
- esp_get_minimum_free_heap_size() 204580
- esp_get_free_heap_size() 205240
- 1.可以知道堆还有挺大的空间。为何会报错 errno:12。
- 2.sendto函数用到的堆空间是在哪里申请和哪里释放的。是否可以用freerost中的void vApplicationStackOverflowHook( TaskHandle_t xTask,签名字符 *pcTaskName );早出原因吗。
- [b]A.源代码部分:(详细请看附件)[/b]
- static void udp_client_task(void *pvParameters)
- {
- char rx_buffer[128];
- char addr_str[128];
- int addr_family;
- int ip_protocol;
- while (1) {
- #ifdef CONFIG_EXAMPLE_IPV4
- struct sockaddr_in dest_addr;
- dest_addr.sin_addr.s_addr = inet_addr("192.168.1.122");
- dest_addr.sin_family = AF_INET;
- dest_addr.sin_port = htons(19999);
- addr_family = AF_INET;
- ip_protocol = IPPROTO_IP;
- inet_ntoa_r(dest_addr.sin_addr, addr_str, sizeof(addr_str) - 1);
- #else // IPV6
- struct sockaddr_in6 dest_addr;
- inet6_aton(HOST_IP_ADDR, &dest_addr.sin6_addr);
- dest_addr.sin6_family = AF_INET6;
- dest_addr.sin6_port = htons(PORT);
- addr_family = AF_INET6;
- ip_protocol = IPPROTO_IPV6;
- inet6_ntoa_r(dest_addr.sin6_addr, addr_str, sizeof(addr_str) - 1);
- #endif
- int sock = socket(addr_family, SOCK_DGRAM, ip_protocol);
- if (sock < 0) {
- ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
- break;
- }
- ESP_LOGI(TAG, "Socket created, sending to %s:%d", "192.168.1.102",9999);
- // uint8_t flag1 = 2;
- int i = 0;
- int errtimer = 0;
- while(1){
- [i][b] int err = sendto(sock, payload, 29, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
- if (err < 0) {
- errtimer++;
- printf("errno:%d\n",errno);
- printf("send%d errno:%d /",i,errtimer);
- int heapmini = esp_get_minimum_free_heap_size();
- printf("hmi : %d /",heapmini);
- int ferrHeap = esp_get_free_heap_size();
- printf("fh : %d /:",ferrHeap);
- int ferrinHeap = esp_get_free_heap_size();
- printf("fih : %d \n",ferrinHeap);[/b][/i]
- }
- vTaskDelay(4);//4ms
- i++;
- if(i%200 == 0)
- {
- printf("send%d errno:%d /",i,errtimer);
- int heapmini = esp_get_minimum_free_heap_size();
- printf("hmi : %d /",heapmini);
- int ferrHeap = esp_get_free_heap_size();
- printf("fh : %d /:",ferrHeap);
- int ferrinHeap = esp_get_free_heap_size();
- printf("fih : %d \n",ferrinHeap);
- }
- }
- vTaskDelete(NULL);
- }
- }
- [b]B.串口打印部分报文:(详细请看附件)[/b]
- [17:33:59.440]收←◆send82000 errno:0 /hmi : 208440 /fh : 217308 /:fih : 217308
- [17:34:00.240]收←◆send82200 errno:0 /hmi : 208440 /fh : 217932 /:fih : 217932
- [17:34:01.040]收←◆send82400 errno:0 /hmi : 208440 /fh : 218348 /:fih : 218348
- [17:34:01.396]收←◆errno:12
- [b][i]send82489 errno:1 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82490 errno:2 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82491 errno:3 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82492 errno:4 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82493 errno:5 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82494 errno:6 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82495 errno:7 /hmi : 204580 /fh : 205240 /:fih : 205240
- errno:12
- send82496 errno:8 /hmi : 204580 /fh : 205240 /:fih : 205240 [/i]
- [/b]
- [17:34:01.852]收←◆send82600 errno:8 /hmi : 204580 /fh : 218556 /:fih : 218556
- [17:34:02.652]收←◆send82800 errno:8 /hmi : 204580 /fh : 218344 /:fih : 218344
UDP发送数据报错问题
-
- Posts: 3
- Joined: Tue Oct 12, 2021 10:14 am
UDP发送数据报错问题
Who is online
Users browsing this forum: No registered users and 180 guests