OpenEdv-开源电子网

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

STM32F051C8+ENC28J60+uIP 时常出现死机

[复制链接]

6

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-12-30
在线时间
60 小时
发表于 2014-1-7 11:58:58 | 显示全部楼层 |阅读模式
产品使用方式:STM32F051C8+ENC28J60+uIP
操作系统:没有
现像:
        TCP_SERVER ,TCP_CLIENT, UDP  三个端口都能实现正常通讯,但时常程序指令会跑到HardFault_Handler ......B.  这个地方,不知道是什么原因造成的死机
尝试过的调试方式:
1.由于项目中用了内存管理,由于对这块了解不是很深,把这一模块去掉,三个端口的接收和发送缓存都更改为全局数组。无效
2.去掉TCP_CLIENT, UDP两个端口,只保留TCP_SERVER ,通过“TCP调试终端”反复发送数据时,仍会有死机的现像


发费了几天的时候,无法找到原因,请各位不吝赐教,谢谢









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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2014-1-7 15:09:36 | 显示全部楼层
hardfault一般是内存访问的问题,所以检查这方面的代码.
包括:数组越界,指针指乱了,局部变量太多等....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
456
金钱
456
注册时间
2012-3-19
在线时间
102 小时
发表于 2014-1-8 23:43:04 | 显示全部楼层
站 长,STM32+ENC28J60+uIP 有在产品中用的比较好的吗?

回复 支持 反对

使用道具 举报

6

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-12-30
在线时间
60 小时
 楼主| 发表于 2014-1-10 14:39:31 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
     局部变量太多也会引起跑到hardfault中吗,  的确有很多的局部变量,也用到指针,通过内存管理,得到一块缓存后,往缓存里写了数据,然后将缓存的指针作为形参传递给了别的函数,不知道这样操作会不会有问题?
    结构体也用的比较多,原来用别的芯片(NXP, FRESCALE。。。)都是随便用,没有这样小心翼翼,都不出问题,现在真有点不知所措了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2014-1-11 05:25:38 | 显示全部楼层
回复【4楼】hujianggao:
---------------------------------
局部变量多,你就尽量放做全局变量,或者在.s文件里面,设置堆栈大一点。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
239
金钱
239
注册时间
2013-12-30
在线时间
60 小时
 楼主| 发表于 2014-1-13 16:55:31 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
stack_size EQU  0X00000400  更改为(1K)
stack_size EQU  0X00000600             (1.5K)

heap_size  EQU  0X00000200 更改为
heap_size  EQU  0X00000600

仍然会不定期的跑到HardFault

只要是链接了TCP_SER  ,不断的发送数据,就会不定期的出错
以下是TCP_SER的勾子函数

void tcp_server_demo_appcall(void)
{
if(uip_aborted())tcp_server_aborted();
  if(uip_timedout())tcp_server_timedout();
if(uip_closed())tcp_server_closed();
  if(uip_connected())tcp_server_connected();
if(uip_acked())tcp_server_acked();

if (uip_newdata())
{
if((tcp_server_sta&(1<<6))==0)
{
if(uip_len>199)
{    
((u8*)uip_appdata)[199]=0;
}     
     strcpy((char*)tcp_server_databuf,uip_appdata);          
tcp_server_sta|=1<<6;
}
}  

if(uip_rexmit()||uip_newdata()||uip_acked()||uip_connected()||uip_poll())
{
tcp_server_senddata();
}
}
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-8-8
在线时间
0 小时
发表于 2017-8-8 16:55:38 | 显示全部楼层
100元买你的代码,我用stm32f0系列和enc28通信,移植不出来,398087764@qq.com,15814742928
回复 支持 反对

使用道具 举报

2

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2016-9-21
在线时间
50 小时
发表于 2017-8-9 10:37:09 | 显示全部楼层
e1v6u 发表于 2017-8-8 16:55
100元买你的代码,我用stm32f0系列和enc28通信,移植不出来,,15814742928

这个我有例程哦,最近用的是dp83848加f1
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 12:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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