完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,各位大佬朋友们!
目前小弟在用正点原子STM32F767 + FreeRTOS +LWIP 调试UDP以及TCP服务器端。。 1. 系统仅存在UART串口printf,以及ETH。其他外设均无 2. udpTask + tcpTask + DefaultTask(默认执行周期20ms,使用osDelay(20)延时) 3. udpTask任务内仅包含:udp_send函数 4. tcpTask任务无任何内容,只有osDelay(20); 5. default任务无任何内容,只有osDelay(10); 遇到的问题: 1. 移植STM32F7官方udp 例程,初始化等操作。可ping通,然后通过udp接收回调函数,反馈接受的内容实现,收发。 2. udp_send HAL接口,不定期不定时返回-4(概率比较大)偶尔-8,err。此时在windows相关小黄人助手里面看到接收的字节大概为20W左右(17字节一帧,20ms周期)。有些时候会达到300W字节。就开始返回-4. 3. FreeRTSO系统正常运行。ETH 的udp send发送失败。以太网RJ45灯灭。ping不通。 跪求各位大佬给一些建议或者入手查看思路。真的快被逼疯了。 以下附上部分源码: 1. 创建三个Task; /* Create the thread(s) */ /* definition and creation of defaultTask */ osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128); defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); /* USER CODE BEGIN RTOS_THREADS */ /* definition and creation of myTaskLED */ osThreadDef(udpTaskA, udpTask, osPriorityIdle, 0, 1024); UDPTaskHandle = osThreadCreate(osThread(udpTaskA), NULL); /* definition and creation of myTaskTCP */ osThreadDef(tcpTaskB, tcpTask, osPriorityIdle, 0, 512); TCPServerHandle = osThreadCreate(osThread(tcpTaskB), NULL); /* USER CODE END RTOS_THREADS */ 2. UDP发送任务 void udpTask(void const * argument) { UINT8 tempA = 0xFF; UINT8 i = 0; udp_echoserver_init(); printf("UDP Task ok n"); /* Infinite loop */ for(;;) { //CheckNaviMessagePacket( naviMessage,sizeof(naviMessage)); UDPSendMessage(NULL,sizeof(NS_CtrlInfo_t)); osDelay(20); } /* USER CODE END LEDTask */ } 3. 回调函数 void udp_echoserver_receive_callback(void *arg, struct udp_PCB *upcb, struct pbuf *p, const ip_addr_t *addr, UINT16 port) { /* Connect to the remote client */ udp_connect(upcb, addr, UDP_CLIENT_PORT); /*GetNaviMessage( p->payload,p->len);*/ memset(recdata,0,sizeof(recdata)); memcpy((char *)recdata,p->payload,p->len); /* Tell the client that we have accepted it */ udp_send(upcb, p); /* free the UDP connection, so we can accept new clients */ udp_disconnect(upcb); /* Free the p buffer */ pbuf_free(p); } 4. 实际udpTask发送内容 void UDPSendMessage(UINT8 *ptrMsg, UINT8 Len) { UINT8 srcIP[4] = {192,168,12,99}; err_t ret; struct pbuf *ptr; ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)recdata),PBUF_POOL); //申请内存 if(ptr) { udp_connect(udpTaskPCB, srcIP, UDP_CLIENT_PORT); ptr->payload=(void*)recdata; ptr->len = sizeof(recdata); ret = udp_send(udpTaskPCB,ptr); //udp发送数据 udp_disconnect(udpTaskPCB); pbuf_free(ptr);//释放内存 printf("Ret %d n",ret); } } 5. udp初始化 void udp_echoserver_init(void) { err_t err; /* Create a new UDP control block */ udpTaskPCB = udp_new(); //创建一个新的UDP控制块 if (udpTaskPCB) { /* Bind the udpTaskPCB to the UDP_PORT port */ /* Using IP_ADDR_ANY allow the udpTaskPCB to be used by any local interface */ err = udp_bind(udpTaskPCB, IP_ADDR_ANY, UDP_SERVER_PORT); //绑定本地IP地址及端口 if(err == ERR_OK) { /* Set a receive callback for the upcb */ udp_recv(udpTaskPCB, udp_echoserver_receive_callback, NULL); //注册接收数据回调函数 } else { udp_remove(udpTaskPCB); printf("can not bind pcb"); } } else { printf("can not create pcb"); } } 跪求各位大佬给指点!!!!!!!!谢谢~!!!!!! |
|
相关推荐
2个回答
|
|
给些参考建议:
既然不设计tcp协议,考虑把这个任务注释掉; 另外,建议将ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)recdata),PBUF_POOL);改为ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)recdata),PBUF_RAM); 还有,你不妨检查下lwipopts.h里的有关内存、udp的配置,先基于默认配置来做。 有关DMA传输的TX/RX descriptor也确认下。 |
|
|
|
-4是LWIP库中的一个错误代码,表示连接被重置。这个问题可能有多种原因,可以尝试以下解决方法:
1. 确保使用正确的IP地址和端口号进行通信。检查发送和接收端的IP地址和端口号是否正确配置。 2. 检查网络连接是否稳定。如果网络连接不稳定或有丢包的情况,可能会导致连接重置。可以尝试使用其他网络设备进行测试,或者使用网络分析工具检查网络状况。 3. 检查代码中的错误。确保代码中没有逻辑错误或者资源冲突。特别是在多任务环境下使用LWIP,需要注意任务间的同步和资源管理。 4. 使用调试工具进行调试。可以使用调试工具(如Keil、J-Link等)进行调试,查看具体的错误发生位置和原因。 5. 更新LWIP库版本。如果使用的是较旧版本的LWIP库,可以尝试更新到最新版本,可能会修复一些已知的问题。 如果以上方法都不能解决问题,建议详细查看错误发生的具体情况,包括错误码的上下文和调用堆栈,以便更好地定位问题所在。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:46 , Processed in 0.972082 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号