at32f437用lwip做udp server,运行一段时间后,故障现象为:能ping通,但是主程序死机。请问是...
udp_send在主循环中,udp_recv中mac中断中。运行一段时间后(几小时后),主循环程序当掉了,但是ping正常。
请问一个问题:我的疑问是如果ping 正常,是不是证明了mcu并没有死掉?
谢谢~老师们!!!
???有没有老师帮忙解答下呀? 本帖最后由 muyichuan2012 于 2023-3-24 18:57 编辑
emac的phy时钟是外接的吗? 本帖最后由 loveyond 于 2023-3-27 14:59 编辑
muyichuan2012 发表于 2023-3-24 13:54
emac的phy时钟是外接的吗?
不是外接的,用的是at32f437 start 开发板,用的是mcu的25mhz,我手上多个start开发板均出现,死机现象,但是能ping通。烦死了 死机的时候,mcu给phy的时钟也还是正常的25mhz,ping也能ping通,但就是主循环程序和定时器中断程序均无法正常工作 我貌似找到原因了,我要把接收中断关掉,把接收放到主循环中就不会死机。
我的接收中断写的有问题吗?这是我的接收中断的代码:
void EMAC_IRQHandler(void)
{
/* lwip receive handle */
lwip_rx_loop_handler();
/* clear the emac dma rx it pending bits */
emac_dma_flag_clear(EMAC_DMA_RI_FLAG);
emac_dma_flag_clear(EMAC_DMA_NIS_FLAG);
}
void lwip_rx_loop_handler(void)
{
/* handles all the received frames */
lwip_pkt_handle();
}
哎,都没人帮助吗? LWIP协议怎么提高UDP速度 如何LWIP如固定本地端口号 lwip中怎样使用http协议传输文件 lwip的移植教程怎么样 LWIP如何实现TCP 长连接? LWIP UDP偶发丢包问题 这个没有用过。 可以使用mqtt通信的吗 loveyond 发表于 2023-3-28 11:04
我貌似找到原因了,我要把接收中断关掉,把接收放到主循环中就不会死机。
我的接收中断写的有问题吗?这是 ...
官方的例程都没开emac中断,也是把接收放在主循环轮询的,不知道是不是有问题才这么做的? 看到别家的中断处理,我明天去改改试试:
void ENET_IRQHandler(void)
{
uint32_t reval;
/* clear the enet DMA Rx interrupt pending bits */
enet_interrupt_flag_clear(ENET_DMA_INT_FLAG_RS_CLR);
enet_interrupt_flag_clear(ENET_DMA_INT_FLAG_NI_CLR);
/* handles all the received frames */
do{
reval = enet_rxframe_size_get();
if(reval > 1){
lwip_pkt_handle();
}
}while(reval != 0);
}
lwip没有研究过的。 lwip发送数据卡死正常 使用串口输出数据试试看的。
页:
[1]
2