OpenEdv-开源电子网

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

裸机 LWIP进入HardFault_Handler问题

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-26
在线时间
4 小时
发表于 2016-1-27 10:51:16 | 显示全部楼层 |阅读模式
STM32F107,移植LWIP1.4.1 ,  DM9161,    UDP TCP能正常通信,这个程序知识开启一个UDP通信,每五秒发送一次心跳(时间包),同时接收PC端的指令,做相应的处理后,回复应答。
问题:
我在连续发送指令后,(即不管有没有接收到应答,都在发送命令,PC上位机有超时重传设置,就是连续发送几次。)出现死机的情况,代码进入HardFault_Handler函数。
(1)我用了他们讲的办法放回BX LR,但是返回不了。无法定位具体地方。


(2)不知道是不是堆栈溢出,所以在发送的函数里把去全部的比较大局部变量全部改成全局变量。还是会出现问题。

会不会是发送和接收函数有问题,请高手看看:(基本参考原子的代码)
//接收回调函数
void udp_Data_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
{
//        printf("UDP_Send_Data:0 \r\n");
        uint8 *dat;
        uint32 DataLen;

        DataLen = 0;
        printf("udp_Data_callback:1 \r\n");
        dat = p->payload;
        UDP_DataFlag = 0x01;
        if((p->len) > sizeof(UDPDataRecBuf))
                DataLen = sizeof(UDPDataRecBuf);
        else
                DataLen = p->len;
        printf("udp_Data_callback:2 \r\n");
        memcpy((uint8*)&UDPDataRecBuf[0],dat,DataLen);
        UDP_DataRecLen = DataLen;
        upcb->remote_ip = *addr;
        upcb->remote_port = port;
        //UDPDatapcb = upcb;
        pUDP_Data = upcb;
        dat = NULL;  
        pbuf_free(p);
        printf("udp_Data_callback:5 \r\n");
}
//UDP 发送数据
void UDP_Send_Data(uint8* str, uint32 datalen)
{
//        printf("UDP_Send_Data:0 \r\n");
        struct pbuf* Pstr;
        printf("UDP_Send_Data:1 \r\n");
//        if( (NULL==pUDP_Data)||(ETH_Mark != ETH_OK) )
        if( (NULL==pUDP_Data) )
        {
                return;
        }
        printf("UDP_Send_Data:2 \r\n");
        Pstr = pbuf_alloc( PBUF_TRANSPORT , datalen , PBUF_RAM );
        memcpy(Pstr->payload, str, datalen);
        udp_send(pUDP_Data, Pstr);
        pbuf_free(Pstr);
        printf("UDP_Send_Data:5 \r\n");



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-26
在线时间
4 小时
 楼主| 发表于 2016-1-27 10:54:24 | 显示全部楼层
不是一发送就出问题,要经过不断点击上位机不同的命令,发送好多次以后出现这个问题。相当于压力测试吧。(防止客户各种随意的操作出问题)
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-26
在线时间
4 小时
 楼主| 发表于 2016-1-27 11:13:32 | 显示全部楼层
这样···
捕获.PNG
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-26
在线时间
4 小时
 楼主| 发表于 2016-1-27 11:17:03 | 显示全部楼层
串口打印
捕获.PNG
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-3-26
在线时间
4 小时
 楼主| 发表于 2016-1-28 17:38:28 | 显示全部楼层
本帖最后由 sipenlin 于 2016-1-28 17:40 编辑

已经解决,局部变量定义了一个u8 buff[60],
memset(buff,0,64);导致出错。

属于内存溢出,栈地址出错
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 00:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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