stm32f107vct6+FreeRTOS+LWIP UDP数据发送问题
非常感谢你的观看,我在用STM32CUBEMx +FreeRTOS+LWIP遇到一些问题,希望能指导一下配置:cpu是stm32f107vct6、PHY是DP83848、LWIP是UDP通信,选择disable DHCP
我用了两个版本的CUBEMx,建立了两个工程(两个工程里面用的udpclient.C.H和83848.C.H都是一样的) 我来列举一下我的问题
工程太大,只能以网盘的方式发送:'(:'(链接:https://pan.baidu.com/s/1TQupZ0mEOokFegyCchk93g密码:rk0k
1.开始使用的是STM32CubeMX-4.15.0版本
我建立了OldETH文件的工程,在 MX_LWIP_Init()之后使用UDP_client_init(server_ip,server_port)来绑定IP和port,我成功的ping通了,udp中断接收数据没问题,但是我udp发送数据的时候出问题了。
我是通过UDP_DataSend(u8* buf,u8 len)这个函数来发送数据的,
uint8_tUDPData="I am udp client!\r\n";
void UDP_DataSend(u8* buf,u8 len)
{
struct pbuf*udp_pbuf;
udp_pbuf=pbuf_alloc(PBUF_RAW,len,PBUF_RAM);
if(udp_pbuf != NULL)
{
udp_pbuf -> payload = buf;
udp_send(udp_pcb,udp_pbuf); //udp_pcb是 UDP_client_init建立的udp控制块
}
pbuf_free(udp_pbuf);
}
当我发送测试数据UDP_DataSend(UDPData,sizeof(UDPData)) 这个是没有问题的,
然而当我要发送我以太网接受回调中所接受到的数据时,UDP_DataSend(udpReceiveData.buf,udpReceiveData.len)出错了,我必须将UDP_DataSend函数改成下面这样才能发送成功,要不然就会进入HardFault_Handler出错中断里面,这是我不能理解的
void UDP_DataSend(u8* buf,u8 len)
{
struct pbuf*udp_pbuf;
udp_pbuf=pbuf_alloc(PBUF_RAW,len,PBUF_RAM);
if(udp_pbuf != NULL)
{
uint8_t UDPDataSendBuf;
memcpy(UDPDataSendBuf,buf,len);
udp_pbuf -> payload = UDPDataSendBuf;
udp_send(udp_pcb,udp_pbuf); //udp_pcb是 UDP_client_init建立的udp控制块
}
pbuf_free(udp_pbuf);
}
2.使用的是新版STM32CubeMX-4.25.0版本
建立了NewETH文件里面的工程,在 MX_LWIP_Init()之后使用UDP_client_init(server_ip,server_port)来绑定IP和port,这时候我也ping通了,也能接收数据了。问题来了,现在不管是发送测试数据还是发送以太网接受回调中所接受到的数据都进入HardFault_Handler出错中断里面。
以上就是我现在遇到的问题,感谢你的帮忙
所以你用了新版本的cubeMx,用了临时的buffer也报错? butterflyspring 发表于 2018-5-7 12:00
所以你用了新版本的cubeMx,用了临时的buffer也报错?
对的,不知道什么原因 我之前移植一个NFC的代码,也是出现国这种诡异的问题,但是我觉得是编译器的问题,你可以试一下将优化去掉,或者换一个IDE试一下,我当时去掉优化就没有hardfault了,换了IDE也是没有了.
页:
[1]