OpenEdv-开源电子网

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

STM32F4-FreeRTOS-LwIP 串口打印Error:..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,441

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-5-29
在线时间
50 小时
发表于 2018-12-18 16:44:28 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 丶吃鱼的猫 于 2018-12-18 16:48 编辑

硬件平台为正点原子探索者开发板,跑的是FreeRTOS系统,移植了LwIP,程序在板子上能正常运行,但是串口会打印Error:..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,441
如图所示,我把所有的中断优先级全给调到5之后了的,大佬帮帮忙看看
程序中用到的中断及优先级
优先级.png

freertos可管理的中断范围
freertos管理优先级.png
串口打印信息
串口.png
板子运行情况
IMG_20181218_164206.jpg




最佳答案

查看完整内容[请看2#楼]

http://www.openedv.com/forum.php?mod=viewthread&tid=283682&extra=
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-12-18 16:44:29 | 显示全部楼层
丶吃鱼的猫 发表于 2018-12-28 11:44
有具体实现代码吗?参考一下,自己写了一份,过段时间就断了,连不上

http://www.openedv.com/forum.php ... d=283682&extra=
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-12-18 16:54:13 | 显示全部楼层
目测应该是中断接收处理函数里操作了信号量
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-5-29
在线时间
50 小时
 楼主| 发表于 2018-12-19 09:31:11 | 显示全部楼层
本帖最后由 丶吃鱼的猫 于 2018-12-19 09:32 编辑
HCHDaLeiGe 发表于 2018-12-18 16:54
目测应该是中断接收处理函数里操作了信号量

找到了,在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 ,有没有什么好的方法呢?
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-19 15:21:09 | 显示全部楼层
怎么看着像是那个断言出错了?
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-12-21 09:57:21 | 显示全部楼层
丶吃鱼的猫 发表于 2018-12-19 09:31
找到了,在lwip_pkt_handle内部调用了malloc和free函数
[mw_shl_code=c,true]void ETH_IRQHandler(void) ...

我是改成了网卡只管接收,把数据放进缓存区,另外起一个任务去处理数据,这样在中断处理中不会调用到FreeRTOS的函数
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-5-29
在线时间
50 小时
 楼主| 发表于 2018-12-28 11:44:41 | 显示全部楼层
HCHDaLeiGe 发表于 2018-12-21 09:57
我是改成了网卡只管接收,把数据放进缓存区,另外起一个任务去处理数据,这样在中断处理中不会调用到Free ...

有具体实现代码吗?参考一下,自己写了一份,过段时间就断了,连不上
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 08:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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