[AT32F407] at32f437用lwip做udp server,运行一段时间后,故障现象为:能ping通,但是主程序死机。请问是...

[复制链接]
 楼主| loveyond 发表于 2023-3-23 14:31 | 显示全部楼层 |阅读模式
udp_send在主循环中,udp_recv中mac中断中。

运行一段时间后(几小时后),主循环程序当掉了,但是ping正常。

请问一个问题:我的疑问是如果ping 正常,是不是证明了mcu并没有死掉?     

谢谢~老师们!!!

 楼主| loveyond 发表于 2023-3-24 11:00 | 显示全部楼层
???有没有老师帮忙解答下呀?
muyichuan2012 发表于 2023-3-24 13:54 | 显示全部楼层
本帖最后由 muyichuan2012 于 2023-3-24 18:57 编辑

emac的phy时钟是外接的吗?
 楼主| loveyond 发表于 2023-3-27 10:31 | 显示全部楼层
本帖最后由 loveyond 于 2023-3-27 14:59 编辑
muyichuan2012 发表于 2023-3-24 13:54
emac的phy时钟是外接的吗?

不是外接的,用的是at32f437 start 开发板,用的是mcu的25mhz,我手上多个start开发板均出现,死机现象,但是能ping通。烦死了
 楼主| loveyond 发表于 2023-3-27 14:59 | 显示全部楼层
死机的时候,mcu给phy的时钟也还是正常的25mhz,ping也能ping通,但就是主循环程序和定时器中断程序均无法正常工作
 楼主| loveyond 发表于 2023-3-28 11:04 | 显示全部楼层
我貌似找到原因了,我要把接收中断关掉,把接收放到主循环中就不会死机。
我的接收中断写的有问题吗?这是我的接收中断的代码:
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();
}

 楼主| loveyond 发表于 2023-3-29 11:26 | 显示全部楼层
哎,都没人帮助吗?
hearstnorman323 发表于 2023-4-4 22:08 | 显示全部楼层
LWIP协议怎么提高UDP速度
janewood 发表于 2023-4-4 22:14 | 显示全部楼层
如何LWIP如固定本地端口号               
xiaoyaodz 发表于 2023-4-7 09:48 | 显示全部楼层
lwip中怎样使用http协议传输文件  
wwppd 发表于 2023-4-7 10:04 | 显示全部楼层
lwip的移植教程怎么样              
abotomson 发表于 2023-4-7 22:31 | 显示全部楼层
LWIP如何实现TCP 长连接?  
alvpeg 发表于 2023-4-7 22:38 | 显示全部楼层
LWIP UDP偶发丢包问题               
adolphcocker 发表于 2023-4-7 22:48 | 显示全部楼层
这个没有用过。              
pmp 发表于 2023-4-7 23:37 | 显示全部楼层
可以使用mqtt通信的吗              
sagade 发表于 2023-4-12 20:52 | 显示全部楼层
loveyond 发表于 2023-3-28 11:04
我貌似找到原因了,我要把接收中断关掉,把接收放到主循环中就不会死机。
我的接收中断写的有问题吗?这是 ...

官方的例程都没开emac中断,也是把接收放在主循环轮询的,不知道是不是有问题才这么做的?
sagade 发表于 2023-4-12 21:10 | 显示全部楼层
看到别家的中断处理,我明天去改改试试:
  1. void ENET_IRQHandler(void)
  2. {  
  3.     uint32_t reval;
  4.   
  5.     /* clear the enet DMA Rx interrupt pending bits */
  6.     enet_interrupt_flag_clear(ENET_DMA_INT_FLAG_RS_CLR);
  7.     enet_interrupt_flag_clear(ENET_DMA_INT_FLAG_NI_CLR);
  8.     /* handles all the received frames */
  9.     do{
  10.         reval = enet_rxframe_size_get();
  11.         
  12.         if(reval > 1){
  13.             lwip_pkt_handle();
  14.         }
  15.     }while(reval != 0);   
  16. }


louliana 发表于 2023-4-12 21:38 | 显示全部楼层
lwip没有研究过的。              
geraldbetty 发表于 2023-4-12 21:51 | 显示全部楼层
lwip发送数据卡死正常               
timfordlare 发表于 2023-4-12 22:02 | 显示全部楼层
使用串口输出数据试试看的。              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

18

帖子

0

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