产品使用方式:STM32F051C8+ENC28J60+uIP
操作系统:没有
现像:
TCP_SERVER ,TCP_CLIENT, UDP 三个端口都能实现正常通讯,但时常程序指令会跑到HardFault_Handler ......B. 这个地方,不知道是什么原因造成的死机
尝试过的调试方式:
1.由于项目中用了内存管理,由于对这块了解不是很深,把这一模块去掉,三个端口的接收和发送缓存都更改为全局数组。无效
2.去掉TCP_CLIENT, UDP两个端口,只保留TCP_SERVER ,通过“TCP调试终端”反复发送数据时,仍会有死机的现像
发费了几天的时候,无法找到原因,请各位不吝赐教,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
局部变量太多也会引起跑到hardfault中吗, 的确有很多的局部变量,也用到指针,通过内存管理,得到一块缓存后,往缓存里写了数据,然后将缓存的指针作为形参传递给了别的函数,不知道这样操作会不会有问题?
结构体也用的比较多,原来用别的芯片(NXP, FRESCALE。。。)都是随便用,没有这样小心翼翼,都不出问题,现在真有点不知所措了
---------------------------------
局部变量多,你就尽量放做全局变量,或者在.s文件里面,设置堆栈大一点。
---------------------------------
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();
}
}
一周热门 更多>