中级会员
 
- 积分
- 303
- 金钱
- 303
- 注册时间
- 2019-11-10
- 在线时间
- 61 小时
|
2金钱
本帖最后由 woshi520laoxie 于 2021-6-6 14:14 编辑
问题描述: 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)
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
|
|