请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
楼主: eric2013
收起左侧

LwIP网络教程开始更新,使用MDK的RTE环境开发,配套RTX5和FreeRTOS两个版本,更新至第7章(2020-05-03)

  [复制链接]

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-5-3 16:48:05 | 显示全部楼层
hpdell 发表于 2020-4-20 17:17
你好,请问下, 这个 rtx5 + Lwip 是不是必须得使用 rte 环境配置才行啊 ??

我 刚刚单独移植了一个 rt ...

可以不使用RTE的。
回复

使用道具 举报

516

主题

3174

帖子

4226

积分

至尊会员

积分
4226
发表于 2020-5-3 21:13:35 | 显示全部楼层
eric2013 发表于 2020-5-3 16:48
可以不使用RTE的。

期待期待呀
回复

使用道具 举报

0

主题

4

帖子

4

积分

新手上路

积分
4
发表于 2020-5-21 09:44:04 | 显示全部楼层
期待LWIP文档更新
回复

使用道具 举报

0

主题

125

帖子

125

积分

初级会员

积分
125
发表于 2020-6-3 10:54:03 | 显示全部楼层
硬汉哥,使能dhcp后一定要连接到路由器或交换机吗,直接连接到电脑,板子是不是会自动生成和电脑同一网段的ip
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-6-3 11:03:14 | 显示全部楼层
yuanzhongda 发表于 2020-6-3 10:54
硬汉哥,使能dhcp后一定要连接到路由器或交换机吗,直接连接到电脑,板子是不是会自动生成和电脑同一网段的 ...

直接到电脑端的话,你得整个DHCP服务器,显得太繁琐了。很多初学的搞不定,所以不推荐。
回复

使用道具 举报

0

主题

125

帖子

125

积分

初级会员

积分
125
发表于 2020-6-3 11:19:16 | 显示全部楼层
eric2013 发表于 2020-6-3 11:03
直接到电脑端的话,你得整个DHCP服务器,显得太繁琐了。很多初学的搞不定,所以不推荐。

那如果我是想让网口数据透传有什么办法吗,就是不管是什么协议都转发出去,我需要的就处理,不需要的就直接透传,透传的不区分tcp和udp这种,有这种办法吗
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-6-3 11:21:13 | 显示全部楼层
yuanzhongda 发表于 2020-6-3 11:19
那如果我是想让网口数据透传有什么办法吗,就是不管是什么协议都转发出去,我需要的就处理,不需要的就直 ...

你设置下你的程序不就行了,比如10秒内无法获取IP地址,直接使用固定IP即可。
回复

使用道具 举报

0

主题

125

帖子

125

积分

初级会员

积分
125
发表于 2020-6-3 11:27:46 | 显示全部楼层
eric2013 发表于 2020-6-3 11:21
你设置下你的程序不就行了,比如10秒内无法获取IP地址,直接使用固定IP即可。

没太看懂,我的意思是板子和pc端相连,pc端一直发送数据,但是板子一端不知道pc端的发送数据协议以及pc的ip,可以把数据透传出去吗。如果10秒内无法获取IP地址,使用固定ip不还是一样吗。
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-6-3 11:31:27 | 显示全部楼层
yuanzhongda 发表于 2020-6-3 11:27
没太看懂,我的意思是板子和pc端相连,pc端一直发送数据,但是板子一端不知道pc端的发送数据协议以及pc的 ...

问:硬汉哥,使能dhcp后一定要连接到路由器或交换机吗,直接连接到电脑,板子是不是会自动生成和电脑同一网段的ip

答:你设置下你的程序不就行了,比如10秒内无法获取IP地址,直接使用固定IP即可。

问:没太看懂,我的意思是板子和pc端相连,pc端一直发送数据,但是板子一端不知道pc端的发送数据协议以及pc的ip,可以把数据透传出去吗。如果10秒内无法获取IP地址,使用固定ip不还是一样吗。

答:UDP广播
回复

使用道具 举报

0

主题

125

帖子

125

积分

初级会员

积分
125
发表于 2020-6-5 14:51:23 | 显示全部楼层
谢硬汉哥,如果想从mac层转发,有类似 netETH_ReceiveRaw这样的函数吗,我看这个该函数写的不支持ipv4
回复

使用道具 举报

14

主题

95

帖子

123

积分

初级会员

积分
123
发表于 2020-6-28 23:58:26 | 显示全部楼层
本帖最后由 gpfrank 于 2020-6-29 00:08 编辑

在例程更改了一下PHY,在nucleuo-H743ZI上跑起来了。用的V5编译器一切正常,换成V6编译器就直接hardfault了。可能是什么原因呢?,补充一下,用的freertos + LWIP的版本。V1.0的。
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 09:21:15 | 显示全部楼层
Assertion "failed to create mem_mutex" failed at line 543 in D:\Program Files (x86)\Keil_v5\PACK\lwIP\lwIP\2.1.0\lwip\src\core\mem.c
Assertion "failed to create lock_tcpip_core" failed at line 613 in D:\Program Files (x86)\Keil_v5\PACK\lwIP\lwIP\2.1.0\lwip\src\api\tcpip.c
移植完,提示以上错误,好像是互斥信号量申请失败
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 10:31:23 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 09:21
Assertion "failed to create mem_mutex" failed at line 543 in D:\Program Files (x86)\Keil_v5\PACK\lwI ...

MDK终于把LwIP的CMSIS-RTOS接口驱动错误修改了
http://www.armbbs.cn/forum.php?m ... 8831&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 10:44:19 | 显示全部楼层
/* èÎÎñμÄêôDÔéèÖà */
const osThreadAttr_t ThreadStart_Attr =
{
        /* Î′ê1óÃ */
//        .cb_mem = &worker_thread_tcb_1,
//        .cb_size = sizeof(worker_thread_tcb_1),
//        .stack_mem = &worker_thread_stk_1[0],
//        .stack_size = sizeof(worker_thread_stk_1),
//        .priority = osPriorityAboveNormal,
//        .tz_module = 0
       
        .name = "ThreadStart",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal4,
        .stack_size = 2048,
};

const osThreadAttr_t ThreadEthCheck_Attr =
{
        .name = "osRtxEthCheckThread",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal3,
        .stack_size = 1024,
};

const osThreadAttr_t ThreadLwIPPro_Attr =
{
        .name = "osRtxLwIPProThread",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal2, //osPriorityNormal2
        .stack_size = 1024,
};

const osThreadAttr_t ThreadMsgPro_Attr =
{
        .name = "ThreadMsgPro",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal2,//osPriorityNormal2
        .stack_size = 1024,
};

const osThreadAttr_t ThreadLED_Attr =
{
        .name = "ThreadLED",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal1,
        .stack_size = 1024,
};

const osThreadAttr_t ThreadUserIF_Attr =
{
        .name = "ThreadUserIF",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal,
        .stack_size = 1024,
};
用的是这个配置,ping一段时间后会超时,使用atkkpin软件进行ping,忽略ping时间间隔
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 10:47:01 | 显示全部楼层
这个问题已经解决了,现在是ping长时间会超时,我按照帖子改了任务优先级,也不行
/* èÎÎñμÄêôDÔéèÖà */
const osThreadAttr_t ThreadStart_Attr =
{
        /* Î′ê1óÃ */
//        .cb_mem = &worker_thread_tcb_1,
//        .cb_size = sizeof(worker_thread_tcb_1),
//        .stack_mem = &worker_thread_stk_1[0],
//        .stack_size = sizeof(worker_thread_stk_1),
//        .priority = osPriorityAboveNormal,
//        .tz_module = 0
       
        .name = "ThreadStart",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal4,
        .stack_size = 2048,
};

const osThreadAttr_t ThreadEthCheck_Attr =
{
        .name = "osRtxEthCheckThread",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal3,
        .stack_size = 1024,
};

const osThreadAttr_t ThreadLwIPPro_Attr =
{
        .name = "osRtxLwIPProThread",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal2, //osPriorityNormal2
        .stack_size = 1024,
};

const osThreadAttr_t ThreadMsgPro_Attr =
{
        .name = "ThreadMsgPro",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal2,//osPriorityNormal2
        .stack_size = 1024,
};

const osThreadAttr_t ThreadLED_Attr =
{
        .name = "ThreadLED",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal1,
        .stack_size = 1024,
};

const osThreadAttr_t ThreadUserIF_Attr =
{
        .name = "ThreadUserIF",
        .attr_bits = osThreadDetached,
        .priority = osPriorityNormal,
        .stack_size = 1024,
};
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 11:04:28 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 10:47
这个问题已经解决了,现在是ping长时间会超时,我按照帖子改了任务优先级,也不行
/* èÎÎ&#241 ...

采用我提供的这个例子驱动,里面做过修正。

回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 11:11:37 | 显示全部楼层
V5-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1.rar (2.80MB)  我用的是这个模板,修改了DM916x的驱动,改成我的芯片KSZ8873,您说的驱动,麻烦发个链接谢谢!
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 11:15:19 | 显示全部楼层
我之前调试工正点原子的例子,也是ping长时间超时。后来用cubexmx生成一个官方例程,还是ping会超时。这个问题困扰我好久了,现在改为您这边提供的例程,还是ping长时间会超时,我用的都是atkkping。忽略ping间隔这种方式测试的
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 11:17:48 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 11:11
V5-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1.rar (2.80MB)  我用的是这个模板,修改了DM916x的驱 ...

这个例子就是已经修改好的,ping几百万包无压力啊。。。。

你这个是你自己没有移植好啊。
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 11:31:46 | 显示全部楼层
测试时候用tcp小助手连接1001端口,数据发送时间10ms,同时开启atkkping进行ping操作,忽略ping间隔,很快就会ping超时的。如果用电脑的ping操作,应该是不会超时的,或者用atkkping 的间隔改为100ms长时间ping也应该不会有问题。这个问题应该是数据量大的时候,中断处理不过来,导致之后的数据包堆积无法得到处理,最好导致ping直接无法回复,您那边也可以再测测看。
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 11:53:41 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 11:31
测试时候用tcp小助手连接1001端口,数据发送时间10ms,同时开启atkkping进行ping操作,忽略ping间隔,很快 ...

这个早就测试过了,无压力,,,,

这个例子之前是V1.0版本,升级到V1.1就是解决了这个问题。
------
升级LwIP网络教程配套例子到V1.1版本,提升长时间数据批量传输的稳定性
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97549


ps:当然可以帮你再测试下。
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 13:32:27 | 显示全部楼层
void ethernetif_poll (struct netif *netif) {
#if defined (PHY_POLL)
  struct ethernetif *eth = netif->state;

  if (!eth->phy_ok || eth->link == ARM_ETH_LINK_DOWN) {
    return;
  }
  if ((eth->rx_event) || (!eth->event_rx_frame)) {
    /* process received ethernet packet */
    ethernetif_input (netif);
  }
  osDelay(1);
#elif defined(PHY_EVENT)
我使用的是Poll模式,刚才测试2万包后ping超时,断点发现eth->rx_event=0,eth->event_rx_frame=1,不再进行接收帧处理,程序没有死,还在正常运行
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 14:11:09 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 13:32
void ethernetif_poll (struct netif *netif) {
#if defined (PHY_POLL)
  struct ethernetif *eth = net ...

已经50万包了,TCP,10ms一次回环,ping包不间断最快速度。
5.png
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 14:16:49 | 显示全部楼层
这个和phy是否会有关系呢,我用的是KSZ8873 这颗,RMII接口,我发现卡的时候ETH_IRQHandler()这个中断很久才会进一次,数据收发不正常
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 14:20:25 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 14:16
这个和phy是否会有关系呢,我用的是KSZ8873 这颗,RMII接口,我发现卡的时候ETH_IRQHandler()这个中断很久 ...

看看是不是你的硬件设计有问题。

等我这里100万包的时候,再给你看下。
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 14:21:58 | 显示全部楼层
你用的这颗phy,是RMII还是MII接口
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2020-8-5 14:22:40 | 显示全部楼层
lyhawk2007 发表于 2020-8-5 14:21
你用的这颗phy,是RMII还是MII接口

RMII
回复

使用道具 举报

3

主题

25

帖子

31

积分

新手上路

积分
31
发表于 2020-8-5 14:23:07 | 显示全部楼层
我根据这个问题更像是出在底层phy驱动上,不像是上层问题,因为出问题时候,连底层中断都不进
回复

使用道具 举报

1

主题

17

帖子

19

积分

新手上路

积分
19
发表于 2020-8-14 08:09:43 | 显示全部楼层
eric2013 发表于 2020-8-5 10:31
MDK终于把LwIP的CMSIS-RTOS接口驱动错误修改了
http://www.armbbs.cn/forum.php?mod=viewthread&tid=988 ...

请教硬汉哥,LWIP之前也用了,内存问题纠结很久,内存堆的时候会慢慢的内存不足,导致死机重启,改成内存池后TCP反复连接断开,仍然有内存错误死机的情况,相比较而言,是不是RL-TCPnet更省心一点
回复

使用道具 举报

1

主题

17

帖子

19

积分

新手上路

积分
19
发表于 2020-12-4 22:46:20 | 显示全部楼层
回复

使用道具 举报

23

主题

101

帖子

147

积分

初级会员

积分
147
发表于 2021-1-18 09:26:13 | 显示全部楼层
eric2013 发表于 2020-5-3 16:47
升级配套例子到V1.1版本。

有ucosIII系统下移植LWIP的工程吗?
回复

使用道具 举报

1

主题

17

帖子

19

积分

新手上路

积分
19
发表于 2021-1-18 19:25:27 | 显示全部楼层
感谢分享,写的挺好的。学习了。
参考网上的网友的资料,在硬汉的加入了webserver演示功能,觉得挺有意思的。参考附件和附图效果...
单个网页去访问没问题,发现如果打开两个网页同时去访问,运行几分钟后就会卡住,不知道问题在哪里?顺便请高手帮看一下

效果图

效果图

V7-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1.1.7z

9.77 MB, 下载次数: 1

源程序

回复

使用道具 举报

1

主题

17

帖子

19

积分

新手上路

积分
19
发表于 2021-1-18 19:47:42 | 显示全部楼层
感谢硬汉的分享资料,非常不错,值得学习。
在硬汉例子的基础上参考了其他网友的资料,加上了webserver演示,挺有意思。程序和效果如附件,供有兴趣的参考。
单个网页访问服务器没有问题,但如果打开两个网页同时访问就会卡住,请高手帮看一下问题。
webdemo.png

V7-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1.1.7z

9.77 MB, 下载次数: 0

回复

使用道具 举报

1

主题

17

帖子

19

积分

新手上路

积分
19
发表于 2021-1-19 08:50:14 | 显示全部楼层
sunwindsz 发表于 2021-1-18 19:47
感谢硬汉的分享资料,非常不错,值得学习。
在硬汉例子的基础上参考了其他网友的资料,加上了webserver演 ...

内容重复了,要如何删除?
回复

使用道具 举报

30

主题

195

帖子

255

积分

高级会员

积分
255
发表于 2021-3-9 21:21:16 | 显示全部楼层
sunwindsz 发表于 2021-1-18 19:47
感谢硬汉的分享资料,非常不错,值得学习。
在硬汉例子的基础上参考了其他网友的资料,加上了webserver演 ...

你能不能想法,只接收1个socket?好像不行,至少有一个可以备用
回复

使用道具 举报

0

主题

2

帖子

2

积分

新手上路

积分
2
发表于 2021-3-21 22:57:33 | 显示全部楼层
感谢楼主的分享
请教个很小白的问题
STM32H743芯片网口 都是自动CRC校验 FCS的吧 不需要设置吧
可不可以这样说 只有芯片网口中断接收到数据 就认为数据是对的?
目前有个项目用modBus Poll老提示 Transaction ID error(接收的帧ID序号不是发送的帧ID号),不知道是硬件还是软件的问题
回复

使用道具 举报

1万

主题

7万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
94721
QQ
 楼主| 发表于 2021-4-2 08:55:08 | 显示全部楼层
lizhaohui513 发表于 2021-3-21 22:57
感谢楼主的分享
请教个很小白的问题
STM32H743芯片网口 都是自动CRC校验 FCS的吧 不需要设置吧

回头我试试。
回复

使用道具 举报

0

主题

2

帖子

2

积分

新手上路

积分
2
发表于 2021-4-7 15:03:17 | 显示全部楼层

看文档默认是自动校验的,有地方可以设置,包括包头校验,IP校验等等
回复

使用道具 举报

23

主题

101

帖子

147

积分

初级会员

积分
147
发表于 2021-4-14 17:55:37 | 显示全部楼层
硬汉哥你好,我按照安富莱_STM32-V5开发板_LwIP V2.X网络教程(V0.1).pdf进行操作,keil的版本是5.17,用到的软件包都是最新的,一步步按照手册做完后编译发现有错误。错误如下:
回复

使用道具 举报

23

主题

101

帖子

147

积分

初级会员

积分
147
发表于 2021-4-14 18:07:36 | 显示全部楼层
硬汉哥你好:     今天按照安富莱_STM32-V5开发板_LwIP V2.X网络教程(V0.1).pdf的第6章 LwIP 网络协议栈移植( RTX5),移植LWIP。keil版本是5.17,用到软件包是都是最新的,如图所示:

一步一步按照手册操作,最后编译时出现错误,错误如下图,第一次使用MDK 的 RTE 环境,不太会用,麻烦硬汉哥点拨一下
Snipaste_2021-04-14_18-05-09.png
Snipaste_2021-04-14_18-02-45.png
Snipaste_2021-04-14_17-59-59.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2023-1-27 09:53 , Processed in 0.102680 second(s), 38 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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