打印

GD32470I_EVAL_Demo_Suites中FreeRTOS_tcpudp卡死问题

[复制链接]
880|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LiveD|  楼主 | 2025-3-12 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
配置了一个UDP单播,在任务中周期发送数据,连接网线时没问题;拔掉网线时程序运行40多秒后会卡死在下面while中
static err_t low_level_output(struct netif *netif, struct pbuf *p)
{
    static xSemaphoreHandle s_tx_semaphore = NULL;
    struct pbuf *q;
    uint8_t *buffer ;
    uint16_t framelength = 0;
    ErrStatus reval = ERROR;
  
    SYS_ARCH_DECL_PROTECT(sr);
   
    if (s_tx_semaphore == NULL){
        vSemaphoreCreateBinary (s_tx_semaphore);
    }

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

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

       /* transmit descriptors to give to DMA */
#ifdef SELECT_DESCRIPTORS_ENHANCED_MODE
        reval = ENET_NOCOPY_PTPFRAME_TRANSMIT_ENHANCED_MODE(framelength, NULL);
#else
        reval = ENET_NOCOPY_FRAME_TRANSMIT(framelength);
#endif /* SELECT_DESCRIPTORS_ENHANCED_MODE */

        SYS_ARCH_UNPROTECT(sr);
        
        /* give semaphore and exit */
        xSemaphoreGive(s_tx_semaphore);
    }
   
    if(SUCCESS == reval){
        return ERR_OK;
    }else{
        while(1){
        }
    }
   
}

使用特权

评论回复
沙发
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 | 只看该作者
网线连接是否稳定,网络配置是否正确。

使用特权

评论回复
5
classroom| | 2025-3-20 13:00 | 只看该作者
检查是否存在死循环、资源竞争或信号量使用不当等问题。

使用特权

评论回复
6
classroom| | 2025-3-20 19:59 | 只看该作者
检查FreeRTOS中各个任务是否存在优先级反转或任务饿死等问题。

使用特权

评论回复
7
laocuo1142| | 2025-3-20 22:00 | 只看该作者
可能是堆栈溢出导致的。

使用特权

评论回复
8
flycamelaaa| | 2025-3-20 22:00 | 只看该作者
中断处理问题?

使用特权

评论回复
9
powerantone| | 2025-3-20 22:00 | 只看该作者
检查信号量的使用是否正确,避免在任务或中断中不当使用信号量导致卡死。
如果在定时器中断中需要使用信号量,建议使用xSemaphoreGiveFromISR()而不是xSemaphoreGive(),以避免在中断上下文中进行阻塞操作。

使用特权

评论回复
10
FranklinUNK| | 2025-3-20 22:39 | 只看该作者
溢出了吗

使用特权

评论回复
11
两只袜子| | 2025-3-21 10:00 | 只看该作者
更新固件和库至最新版本。

使用特权

评论回复
12
jcky001| | 2025-3-21 13:00 | 只看该作者
检查硬件连接是否正确。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝