历史上的今天
今天是:2025年04月22日(星期二)
2018年04月22日 | STM32F4 LAN8720以及LWIP的移植调试记录 (3)
2018-04-22 来源:eefocus
LAN8720配置:
IP: 192.168.192.30
Gateway: 192.168.192.1
检测到高频率的ARP包
包的内容在询问192.168.192.1的mac地址,并要求应答者发往192.168.192.30。
可以判断为LAN8720可能要夸网段发包,但是找不到网管。
于是把LAN8720的网关改为192.168.192.15, 即PC机的IP。
然后使用wireshark抓包。
能够看到高频的错误包信息。
从抓到的包可以看到,IP地址和端口都不是想要的。
查到在sendto函数的IP地址赋值,原子的例程,赋值方式如下:
upcb->remote_ip=*addr;1
而pcb中remote_ip的类型和addr的类型相同,都为:struct ip_addr *
/* This is the aligned version of ip_addr_t,
used as local variable, on the stack, etc. */
struct ip_addr {
u32_t addr;
};12345于是把自己的代码改成:
pcb->remote_ip.addr = 0x0FC0A8C0;1
于是发出去了。
发送内容是数组时会死在发送函数里。
发送前的call stack:
调用完sendto后的call stack:
那么在后边弹栈的时候就会崩。
用原子的例程去试,代码也会掉进Hardfault。
原子的例程:
//UDP服务器发送数据
void udp_demo_senddata(struct udp_pcb *upcb)
{
struct pbuf *ptr;
ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)tcp_demo_sendbuf),PBUF_POOL); //申请内存
if(ptr)
{
ptr->payload=(void*)tcp_demo_sendbuf;
udp_send(upcb,ptr); //udp发送数据
pbuf_free(ptr);//释放内存
}
}
奇怪的地方在于
ptr->payload = (void*)tcp_demo_sendbuf;
payload没用使用memcpy而是直接被一个指针赋值。
按网上的例子把这里改成:
memset(ptr->payload, 0 , ptr->len);
memcpy(ptr->payload, dataptr, sendsize);
然后就不报错了。不知道为啥原子的能跑通。
调recvfrom函数崩掉了
int len;
len = recvfrom(socket_n, _commandBuffer, len, MSG_DONTWAIT, (sockaddr *)&remoteaddr, &remoteaddrlen);
问题在于传入的第三个参数len 是缓冲区长度。
而申请到的len误作为值传入。
在recvfrom函数中调用了memset 对缓冲区清零。然后代码就崩了。
史海拾趣
|
Rich wave 的FAE ,一次来公司support。留下的资料。拿出来和大家一起分享。说明下,此PA频段用在2.4G,所以调试起来比较容易。难做的是5G频段的,high power,PA Matching ,PA Output power 要达到25dBm,EVM… 查看全部问答> |
|
采用ADM2582E/ADM2587E实现完全半/全双工的RS-485/RS-422接口隔离 采用ADM2582E/ADM2587E实现完全半/全双工的RS-485/RS-422接口隔离 作者:晶圆技术部 RS-485标准是一种常见的总线架构,其通用性及远距离传输能力使其广泛应用于各种通信接口电路。在多数情况下,由于应用环境的恶劣,需要对RS-485接口采用 ...… 查看全部问答> |
|
问各位两点问题: 1. 下面vhdl代码中为什么要使用arith程序包呢? 2. msb_sum: INTEGER :=15; 那么msb_sum /2应该等于7还是等于8呢?为什么? LIBRARY IEEE; &nbs ...… 查看全部问答> |
|
我的触摸屏(DOP-B07S201)触摸没有响应,下面的按键好使。打开触摸鼠标,小手也随着东就是不执行点击的操作。在系统界设置里的触摸测试也没响应。应该是触摸屏坏了吧。请各位大侠帮忙分析一下。… 查看全部问答> |
|
关键特性 内部30mΩ(典型值)的RDS(ON)的高侧和5V时18mΩ(典型值)低边MOSFET 连续3A输出电流在整个温度范围 95%的效率与3.3V输出在3A 1%输出负载,线路和温度电压精度 工作于2.7V至5.5V电源 逐周期过流保护 可 ...… 查看全部问答> |
|
设计里用了一个锁存器和一个38译码器,这两个器件单独工作都没有问题,可是连起来一起工作时就有问题了。设计如下图[local]1[/local]仿真如图:[local]2[/local]问题在于当CS[2..0]=1时,不应该锁存啊?!!… 查看全部问答> |
|
CCS UniFlash V2.2 http://software-dl.ti.com/dsps/f ... _ccstudio/uniflash/ 支持的设备列表C2000™ 32-bit Real-time Control MCUs Hercules™ ARM® Safety MCUs MSP430™ Ultra-Low Power 16-bit Microcontroller ...… 查看全部问答> |




