初级会员

- 积分
- 141
- 金钱
- 141
- 注册时间
- 2017-5-29
- 在线时间
- 50 小时
|

楼主 |
发表于 2018-12-19 09:31:11
|
显示全部楼层
本帖最后由 丶吃鱼的猫 于 2018-12-19 09:32 编辑
找到了,在lwip_pkt_handle内部调用了malloc和free函数
[mw_shl_code=c,true]void ETH_IRQHandler(void)
{
while(ETH_GetRxPktSize(DMARxDescToGet)!=0) //检测是否收到数据包
{
lwip_pkt_handle();
}
ETH_DMAClearITPendingBit(ETH_DMA_IT_R); //清除DMA中断标志位
ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS); //清除DMA接收中断标志位
} [/mw_shl_code][mw_shl_code=c,true]void lwip_pkt_handle(void)
{
//从网络缓冲区中读取接收到的数据包并将其发送给LWIP处理
ethernetif_input(&lwip_netif);
}[/mw_shl_code]
[mw_shl_code=c,true]err_t ethernetif_input(struct netif *netif)
{
err_t err;
struct pbuf *p;
p=low_level_input(netif);
if(p==NULL) 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;
} [/mw_shl_code]
如果我想用中断接收以太网数据,还不让串口打印Error:..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,441 ,有没有什么好的方法呢?
|
|