STM32F051C8+ENC28J60+uIP 时常出现死机

2019-08-14 17:24发布

产品使用方式:STM32F051C8+ENC28J60+uIP
操作系统:没有
现像:
        TCP_SERVER ,TCP_CLIENT, UDP  三个端口都能实现正常通讯,但时常程序指令会跑到HardFault_Handler ......B.  这个地方,不知道是什么原因造成的死机
尝试过的调试方式:
1.由于项目中用了内存管理,由于对这块了解不是很深,把这一模块去掉,三个端口的接收和发送缓存都更改为全局数组。无效
2.去掉TCP_CLIENT, UDP两个端口,只保留TCP_SERVER ,通过“TCP调试终端”反复发送数据时,仍会有死机的现像


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









友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-08-14 17:40
 精彩回答 2  元偷偷看……
hzxjm
2楼-- · 2019-08-14 17:59
站 长,STM32+ENC28J60+uIP 有在产品中用的比较好的吗?

hujianggao
3楼-- · 2019-08-14 18:26
回复【2楼】正点原子:
---------------------------------
     局部变量太多也会引起跑到hardfault中吗,  的确有很多的局部变量,也用到指针,通过内存管理,得到一块缓存后,往缓存里写了数据,然后将缓存的指针作为形参传递给了别的函数,不知道这样操作会不会有问题?
    结构体也用的比较多,原来用别的芯片(NXP, FRESCALE。。。)都是随便用,没有这样小心翼翼,都不出问题,现在真有点不知所措了
正点原子
4楼-- · 2019-08-14 21:43
回复【4楼】hujianggao:
---------------------------------
局部变量多,你就尽量放做全局变量,或者在.s文件里面,设置堆栈大一点。
hujianggao
5楼-- · 2019-08-15 03:05
回复【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();
}
}
e1v6u
6楼-- · 2019-08-15 03:34
 精彩回答 2  元偷偷看……

一周热门 更多>