完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、测试环境:
硬件官方开发板:ESP32_DevKitc_V4 IDF 的具体版本:ESP-IDF v4.0.1 开发环境: Windows 软件工程:使用BSD Socket API Example 官方工程。修改了udp_client.C的应用内容。 menuconfig 做配置更改 使用 官方的BSD Socket API Example(:esp-idfexamplesprotocolssocketsudp_clientmainudp_client.c(如附件udp_client.c,工程配置如(sdkconfig".txt"))) 二、代码出现的问题: sendto会随机出现return -1 的现象。 错误long errno:12 。/* Not enough space */ 三、提问问题: 可以从串口打印中知道,报错 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 );早出原因吗。 A.源代码部分:(详细请看附件) 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){ int err = sendto(sock, payload, 29, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); if (err < 0) { errtimer++; printf("errno:%dn",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); } 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.串口打印部分报文:(详细请看附件) [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 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 [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 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
920 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 21:16 , Processed in 0.795766 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号