GD32470I_EVAL_Demo_Suites中FreeRTOS_tcpudp卡死问题

[复制链接]
1495|11
 楼主| LiveD 发表于 2025-3-12 11:55 | 显示全部楼层 |阅读模式
配置了一个UDP单播,在任务中周期发送数据,连接网线时没问题;拔掉网线时程序运行40多秒后会卡死在下面while中
  1. static err_t low_level_output(struct netif *netif, struct pbuf *p)
  2. {
  3.     static xSemaphoreHandle s_tx_semaphore = NULL;
  4.     struct pbuf *q;
  5.     uint8_t *buffer ;
  6.     uint16_t framelength = 0;
  7.     ErrStatus reval = ERROR;
  8.   
  9.     SYS_ARCH_DECL_PROTECT(sr);
  10.    
  11.     if (s_tx_semaphore == NULL){
  12.         vSemaphoreCreateBinary (s_tx_semaphore);
  13.     }

  14.     if (xSemaphoreTake(s_tx_semaphore, LOWLEVEL_OUTPUT_WAITING_TIME)){   
  15.         SYS_ARCH_PROTECT(sr);
  16.       
  17. [color=Red]       while((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)){[/color]
  18.         }   
  19.         buffer = (uint8_t *)(enet_desc_information_get(dma_current_txdesc, TXDESC_BUFFER_1_ADDR));

  20.         for(q = p; q != NULL; q = q->next){
  21.             memcpy((uint8_t *)&buffer[framelength], q->payload, q->len);
  22.             framelength = framelength + q->len;
  23.         }

  24.        /* transmit descriptors to give to DMA */
  25. #ifdef SELECT_DESCRIPTORS_ENHANCED_MODE
  26.         reval = ENET_NOCOPY_PTPFRAME_TRANSMIT_ENHANCED_MODE(framelength, NULL);
  27. #else
  28.         reval = ENET_NOCOPY_FRAME_TRANSMIT(framelength);
  29. #endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */

  30.         SYS_ARCH_UNPROTECT(sr);
  31.         
  32.         /* give semaphore and exit */
  33.         xSemaphoreGive(s_tx_semaphore);
  34.     }
  35.    
  36.     if(SUCCESS == reval){
  37.         return ERR_OK;
  38.     }else{
  39.         while(1){
  40.         }
  41.     }
  42.    
  43. }
 楼主| LiveD 发表于 2025-3-12 11:57 | 显示全部楼层
卡死在 while((uint32_t)RESET != (dma_current_txdesc->status & ENET_TDES0_DAV)中,插上网线后可恢复运行
 楼主| LiveD 发表于 2025-3-12 12:11 | 显示全部楼层

RE: GD32470I_EVAL_Demo_Suites中FreeRTOS_tcpudp卡死问题求助

求助各位大神!
probedog 发表于 2025-3-20 10:32 | 显示全部楼层
网线连接是否稳定,网络配置是否正确。
classroom 发表于 2025-3-20 13:00 | 显示全部楼层
检查是否存在死循环、资源竞争或信号量使用不当等问题。
classroom 发表于 2025-3-20 19:59 | 显示全部楼层
检查FreeRTOS中各个任务是否存在优先级反转或任务饿死等问题。
laocuo1142 发表于 2025-3-20 22:00 | 显示全部楼层
可能是堆栈溢出导致的。
flycamelaaa 发表于 2025-3-20 22:00 | 显示全部楼层
中断处理问题?
powerantone 发表于 2025-3-20 22:00 | 显示全部楼层
检查信号量的使用是否正确,避免在任务或中断中不当使用信号量导致卡死。
如果在定时器中断中需要使用信号量,建议使用xSemaphoreGiveFromISR()而不是xSemaphoreGive(),以避免在中断上下文中进行阻塞操作。
FranklinUNK 发表于 2025-3-20 22:39 来自手机 | 显示全部楼层
溢出了吗
两只袜子 发表于 2025-3-21 10:00 | 显示全部楼层
更新固件和库至最新版本。
jcky001 发表于 2025-3-21 13:00 | 显示全部楼层
检查硬件连接是否正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部