完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在有一个项目,使用STM32F030R8单片机,外挂W5500 TCP/IP协议栈,开发环境使用MDK5.14;单片机已更换过,或者单独运行有异常的代码,问题还是存在的;
单片机ROM为64K,内存8K,MDK使用默认设置; 项目编译后,调试运行到结构体赋值时产生了HardFault异常,找不到原因! ############MAP文件的信息####################### ============================================================================== Code (inc. data) RO Data RW Data ZI Data Debug 28704 1750 4984 172 3580 367126 Grand Totals 28704 1750 4984 172 3580 367126 ELF Image Totals 28704 1750 4984 172 0 0 ROM Totals ============================================================================== Total RO Size (Code + RO Data) 33688 ( 32.90kB) Total RW Size (RW Data + ZI Data) 3752 ( 3.66kB) Total ROM Size (Code + RO Data + RW Data) 33860 ( 33.07kB) ============================================================================== ######################代码######################### 下面是代码: 头文件中的结构体定义: typedef struct _RIP_MSG { uint32 xid; uint8 op; uint8 htype; uint8 hlen; uint8 hops; uint16 secs; uint16 flags; uint8 ciaddr[4]; uint8 yiaddr[4]; uint8 siaddr[4]; uint8 giaddr[4]; uint8 chaddr[16]; uint8 sname[64]; uint8 file[128]; uint8 OPT[312]; }RIP_MSG; --------------------------------------------------------------------------------------------------------------------- C文件中的代码: uint8 EXTERN_DHCPBUF[1024];//定义数组 RIP_MSG * pRIPMSG = (RIP_MSG*)EXTERN_DHCPBUF; //定义结构体指针 --------------------------------------------------------------------------------------------------------------------- 产生异常的代码(如果注释掉这些代码,整个工程就可以正常运行): memset((void*)pRIPMSG,0,sizeof(RIP_MSG)); // 发生异常 将结构体初始化为0 , 或: pRIPMSG->op = DHCP_BOOTREQUEST;//没异常 pRIPMSG->htype = DHCP_HTYPE10MB;//没异常 pRIPMSG->hlen = DHCP_HLENETHERNET;//没异常 pRIPMSG->hops = DHCP_HOPS;//没异常 temp= (unsigned int *)pRIPMSG->xid; //没异常 *temp= htonl(DHCP_XID); //发生异常 这里htonl(DHCP_XID)的数值=0x78563412; 调试时的汇编代码: 99: temp= (unsigned int *)pRIPMSG->xid; 0x08005FB6 489F LDR r0,[pc,#636] ; @0x08006234 0x08005FB8 6800 LDR r0,[r0,#0x00] 0x08005FBA 6805 LDR r5,[r0,#0x00] 100: *temp= htonl(DHCP_XID); 0x08005FBC 489E LDR r0,[pc,#632] ; @0x08006238 0x08005FBE 6800 LDR r0,[r0,#0x00] 0x08005FC0 F7FFFBFC BL.W htonl (0x080057BC) 0x08005FC4 6028 STR r0,[r5,#0x00] //在这里发生异常 --------------------------------------------------------------------------------------------------------------------- 麻烦各位,帮忙看看哪里有问题? |
|
相关推荐
13个回答
|
|
temp= (unsigned int *)pRIPMSG->xid; //查一下temp指针指向的地址,可能是4字节对齐问题
|
|
|
|
这个地址是4字节对齐的,当需要赋值下一个元素时,PC值会加4;这个结构体里面只有这一个是4字节,其他都是单字节或2个字节 |
|
|
|
我来学习一下结构体的用法,不知道哪位大神推荐一下,谢谢
|
|
|
|
memset((void*)pRIPMSG,0,sizeof(RIP_MSG));这个第一个参数你转成void指针不对吧,应该是char指针才对吧
|
|
|
|
memset((void*)pRIPMSG,0,sizeof(RIP_MSG)); // 发生异常 将结构体初始化为0
RIP_MSG 只是一个形参。 需要声明一个实参。 RIP_MSG Rip_Msg; |
|
|
|
|
|
|
|
为什么要引入temp, 这样"pRIPMSG->xid=htonl(DHCP_XID);"不甘心?
|
|
|
|
|
|
|
|
代码好多,帮顶
|
|
|
|
|
|
|
|
问题解决了吗
|
|
|
|
楼主你好,我也遇到同样的问题,程序卡死在 pRIPMSG->xid = DHCP_XID;//htonl(DHCP_XID);。该怎么解决呢?求指教
|
|
|
|
__align(4) 修饰一下数组,就可要解决问题了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
577 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
907 浏览 2 评论
2019 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1118 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1543 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 19:26 , Processed in 0.841480 second(s), Total 97, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号