OpenEdv-开源电子网

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

STM32 使用Lwip的时候全局变量异常

[复制链接]

22

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2019-11-10
在线时间
61 小时
发表于 2021-6-6 13:53:00 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 woshi520laoxie 于 2021-6-6 14:14 编辑

2.png 问题描述:  g_mynetif ,netif的内容变了,全局变量和指向全局变量的地址。

使用MCU:之前使用的是STM32F407
目前项目需要更换:使用GD32F407ZGT6
根据例程修了Lwip代码

netconf.c 文件中定义了一个全局变量
static struct netif g_mynetif;

   netif_add(&g_mynetif, &ipaddr, &netmask, &gw, NULL, eernetif_init, eernet_input);    // (1)
   netif_set_default(&g_mynetif); // (2)
1.jpg
   ethernetif_init =》low_level_init(netif); =》netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
   但是仿真的时候,全局变量 g_mynetif 和 指向 全局变量的指针 netif里面内容不一致,地址相同,数据丢失了。
   从截图中可以看到 { g_mynetif ,netif}的地址都是0x20017e08,但是运行过程中,我打了一个断点数据就不对了。导致判断的时候出现了异常。
因为仿真的时候,需要运行代码:netif_set_up(&g_mynetif);
if (!(netif->flags & NETIF_FLAG_UP))   // 这里判断就出错了
{
    netif_set_flags(netif, NETIF_FLAG_UP);
}理论上就是我设置的值:netif->flags 为:0x0e,但是判断的时候却是 0x01  {netif->flags 这个值通过调试口打印的确是0x0e,但是判断的时候却变成了1},
在 netif_set_up() 这里判断


例如我打了一个断点,指针的值是对的,但是里面的MTU值是不对的。我突然想了一下,会不会这个结构不对了,比如全局变量使用的struct netif 这个结构用的结构体在一个头文件定义了,
low_level_init() 里面的 struct netif 用到了另外一个结构了,导致数据就出现了错误。

请教:一般这种异常是什么因素导致的,如果不是仿真还真不知道问题会出在这里。
D:\Soft_Normal\Youdao\Data\weixinobU7VjjylVFJIRHXm-Xo83a5OsH8\dedcc9245cb14190b5b370f1ee31e2ea\clipboard.png





最佳答案

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

问题已经找到,的确是调用了两个同样的结构
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2019-11-10
在线时间
61 小时
 楼主| 发表于 2021-6-6 13:53:01 | 显示全部楼层
问题已经找到,的确是调用了两个同样的结构
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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