OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3278|回复: 7

STM32F407 LWIP ETH_IRQHandler 问题

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-27
在线时间
7 小时
发表于 2020-7-23 16:14:27 | 显示全部楼层 |阅读模式
1金钱
我使用正点原子的例程序,lwip版本为1.4.1,做了一个内部的嵌入式网页,我发现刚开始运行都正常,网页周期性刷新,大概为1s,同时一直ping这个板子,过一会就ping超时,并且网页也无法访问了,我设置断点发现ETH_IRQHandler这个中断很久才进一次,正常运行时候,这个中断进的很快,不知道为什么跑一段时间这个中断就进的很慢了,导致数据包处理超时,导致网络故障。
下面的是中断处理的内容
void ETH_IRQHandler(void)
{
       
        u32 t=0;
        while((t=ETH_GetRxPktSize(DMARxDescToGet))!=0)        
        {
                //printf("PktSize=%d\r\n",t);
                lwip_pkt_handle();               
        }
        ETH_DMAClearITPendingBit(ETH_DMA_IT_R);        
        ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);       

}  

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-7-24 02:07:36 | 显示全部楼层
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-27
在线时间
7 小时
 楼主| 发表于 2020-7-27 12:19:13 | 显示全部楼层
顶一下
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-27
在线时间
7 小时
 楼主| 发表于 2020-7-30 13:18:32 | 显示全部楼层
没人回复啊
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2020-7-30 15:09:06 | 显示全部楼层
lwip_pkt_handle 函数里干嘛了?处理太慢了吧
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-27
在线时间
7 小时
 楼主| 发表于 2020-7-30 16:56:36 | 显示全部楼层
void lwip_pkt_handle(void)
{
        ethernetif_input(&lwip_netif);
}

//err_t ethernetif_input(struct netif *netif)
//{
//        err_t err;
//        struct pbuf *p;
//        p=low_level_input(netif);
//        if(p==NULL)
//        {               
//                printf("level_input=NULL\r\n");
//                return ERR_MEM;
//        }
//        err=netif->input(p, netif);
//        if(err!=ERR_OK)
//        {
//                LWIP_DEBUGF(NETIF_DEBUG,("ethernetif_input: IP input error\n"));
//                pbuf_free(p);
//                p = NULL;
//        }
//        return err;
//}
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-27
在线时间
7 小时
 楼主| 发表于 2020-7-30 16:57:26 | 显示全部楼层
这个函数就是底层的读取数据包了,我现在创建了一个任务,中断只发送信号量,但是还是会卡死
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-27
在线时间
7 小时
 楼主| 发表于 2020-7-30 16:58:18 | 显示全部楼层
void ETH_IRQHandler(void)
{
       
        u32 t=0;
       
       
       
       
       
        OS_CPU_SR  cpu_sr;

  OS_ENTER_CRITICAL();  
  OSIntNesting++;
       
        //printf("InIRQ\r\n",t);
        if ( ETH_GetDMAFlagStatus(ETH_DMA_IT_R) == SET)//ÅD¶ÏêÇ2»êǽóêÕÖD¶Ï
        {

                  NetEvent=NETIF_EVENT_RX;
                  OSMboxPost(NETIF_EVENT_WAIT_ALL,(void*)&NetEvent);
                        ETH_DMAClearITPendingBit(ETH_DMA_IT_R);         //Çå3yDMAÖD¶Ï±ê־λ
                        ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);        //Çå3yDMA½óêÕÖD¶Ï±ê־λ
  }


       
        OS_EXIT_CRITICAL();
  OSIntExit();
}  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-30 19:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表