历史上的今天
返回首页

历史上的今天

今天是: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: 
发送前的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 对缓冲区清零。然后代码就崩了。


推荐阅读

史海拾趣

ELPIDA公司的发展小趣事

在成立初期,ELPIDA凭借其强大的技术实力和规模效应,迅速在全球DRAM市场中占据了重要地位。公司不断推出创新产品,扩大市场份额,成为行业内的重要参与者。然而,随着市场竞争的加剧和技术的快速变化,ELPIDA也面临着巨大的挑战。

东科半导体(DK)公司的发展小趣事

为了加速技术创新和人才培养,东科半导体(DK)公司积极与高校和科研机构开展产学研合作。公司与安徽工业大学共建联合实验室,共同研发新技术、新产品。此外,东科还积极引进国内外优秀人才,打造了一支高素质、专业化的研发团队。通过与高校和科研机构的合作,东科不仅提升了自身的研发实力,也为公司的长期发展奠定了坚实的人才基础。

Alorium Technology公司的发展小趣事

东科半导体(DK)公司一直将技术创新作为发展的核心驱动力。公司投入大量资金和资源用于研发,先后开发出AC/DC、同步整流、第三代半导体氮化镓芯片等先进技术。其中,东科半导体的同步整流芯片研发成功,其独特的两引脚封装技术为全球首创,为公司赢得了行业内的独家竞争优势。这一技术的成功应用,不仅提升了公司产品的性能,也进一步巩固了东科在电源管理芯片市场的领先地位。

FOTEK公司的发展小趣事

随着业务的不断拓展,福禄克意识到全球化布局的重要性。1970年代,公司在英国设立了首个海外生产基地,随后又在荷兰和中国等地建立工厂。这一系列举措不仅降低了生产成本,还使福禄克能够更贴近全球市场需求,提供更加快速和灵活的服务。同时,福禄克在全球范围内建立了广泛的销售和服务网络,进一步巩固了其市场地位。

General Microcircuits Corp公司的发展小趣事
根据所需的信号频率和增益来选择具有足够GBW的运算放大器。
Corsair Memory Inc公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

问答坊 | AI 解惑

Richwave PA Matching circuit

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接口采用 ...…

查看全部问答>

VHDL中arith程序包和除法问题

问各位两点问题: 1. 下面vhdl代码中为什么要使用arith程序包呢? 2. msb_sum: INTEGER :=15;    那么msb_sum /2应该等于7还是等于8呢?为什么? LIBRARY IEEE;               &nbs ...…

查看全部问答>

这里有武汉做嵌入式开发的么?

这里有武汉做嵌入式开发的么? 大家来报个道吧…

查看全部问答>

台达DOP-B07S201触摸屏,触摸不好使

我的触摸屏(DOP-B07S201)触摸没有响应,下面的按键好使。打开触摸鼠标,小手也随着东就是不执行点击的操作。在系统界设置里的触摸测试也没响应。应该是触摸屏坏了吧。请各位大侠帮忙分析一下。…

查看全部问答>

关于2路ADC同步采的问题

                                 参照固件库内的DEMO来配置ADC,使ADC1和ADC2同步转换各自的一个通道,用定时器来触发,发现DMA出来的数据只有一般 ...…

查看全部问答>

lm3s8962ti原厂交换fpga

最好带sdram我好开发视频用…

查看全部问答>

MAX15058高效率,电流模式,同步降压型开关稳压器特性

关键特性   内部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时,不应该锁存啊?!!…

查看全部问答>

TI的CCS UniFlash V2.2不错!方便烧制程序

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 ...…

查看全部问答>