我用MSP430FR5739+cc3000,在ti官网上下载了cc3000 FRAM Sensor Application程序包修改程序,用的是DHCP,可以正常连上路由器,我创建了用于udp的socket,用sendto()广播数据正常,用select()监听socket和recvfrom()接收数据也正常;就是同时广播和接收的时候,程序卡死了,这是收发冲突了么?这是怎么回事?能帮我解答一下么?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我用MSP430FR5739+cc3000,在ti官网上下载了cc3000 FRAM Sensor Application程序包修改程序,用的是DHCP,可以正常连上路由器,我创建了用于udp的socket,用sendto()广播数据正常,用select()监听socket和recvfrom()接收数据也正常;就是同时广播和接收的时候,程序卡死了,这是收发冲突了么?这是怎么回事?能帮我解答一下么?
几天都没人回复,不过已经解决的问题,只要把固件版本升级到最新就可以,但是255.255.255.255的广播形式还是不可以用,不知道固件还不稳定还是其他原因。固件下载地址:http://processors.wiki.ti.com/index.php/CC3000_Wi-Fi_Downloads。
我也有同样的问题, UDP广播只能发送1,2次, 就死机;
固件更新是用Patch Programmer下载的吗?
//test group socket;
wlSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
wrSocketAddr.sa_family = AF_INET;
wsSocketAddr.sa_family = AF_INET;
// the source port 7999=0x1F3F;
wrSocketAddr.sa_data[0] = 0x1F; //ascii_to_char(usBuffer[2], usBuffer[3]);
wrSocketAddr.sa_data[1] = 0x3F; //ascii_to_char(usBuffer[4], usBuffer[5]);
wsSocketAddr.sa_data[0] = 0x1F; //ascii_to_char(usBuffer[2], usBuffer[3]);
wsSocketAddr.sa_data[1] = 0x3F; //ascii_to_char(usBuffer[4], usBuffer[5]);
wsSocketAddr.sa_data[2] = 255;
wsSocketAddr.sa_data[3] = 255;
wsSocketAddr.sa_data[4] = 255;
wsSocketAddr.sa_data[5] = 255;
// all 0 IP address
memset (&wrSocketAddr.sa_data[2], 0, 4);
bind(wlSocket, &wrSocketAddr, sizeof(sockaddr));
//test second socket;
while(1){
sendto(wlSocket, (unsigned char*)wlSocketDataString, sizeof(wlSocketDataString), 0, &wsSocketAddr, sizeof(sockaddr));
delay_ms(1000);
}
是的,里面有两个工程工程:Patch Programmer IAR_DR_Patch和Patch Programmer IAR_FW_Patch,先下载第一个,再下载第二个
确定是升级了固件吗?可以用代码把固件版本读出来的,就在nvmem.c里,有个函数nvmem_read_sp_version可以读出版本号,如果升级了的版本号是1.24
To Shuming Ye: 你用的是cc3000 FRAM Sensor Application,这是比较老的host driver吧。能否patch programmer和host driver都升到最新的?
To Chen Jin: 请问死机的现象是什么?能否麻烦调试一下,看看是死在哪个函数里面了。还有就是能否确认fw和host driver都用最新的。
To Chen Jin: 我刚才又试了一下msp430fr5739和cc3000, udp broadcast 用255.255.255.255是可以一直发的。
就是用你上面的代码。不过你上面的代码的意思是无论你设成什么IP,之后你都会用memset把它设成0.你说对吗?
Again, 能否请调试一下,看看sock结构体的值和死在哪个函数里。更好是用wireshark去抓抓包,看看到底有没有发出来。
我之前测试的时候,发是可以一直发,几天都可以不死,但是,一旦发送和接收同时存在,不多久就死了
TO yonghua pan
Firmware 1.18 , Hostdriver 14;
还是不行, 偶尔能发出1次UDP广播包, 后死在: hci_event_handler(void *pRetParams, unsigned char *from, unsigned char *fromlen),
程序是基于 BasicWiFi Application 改的, 在MSP-EXP430FR5739+CC3000 EM BOARD--CC3000 Evaluation Module Board 下运行;
可以把你的测试程序(Workspace) 完整的发给我, 我在CC3000 EM BOARD下测试看看;
着急,花了太多时间了, My Email: kiteu2@sohu.com, 谢谢!!
MSP430FR5739+CC3000最新的SDK,没有动任何东西除了修改下面的代码段. 在输入的命令如下
××××××××××××××××××××××
03
04051234502115cffffffff
××××××××××××××××××××××
// Handle send data command
case UART_COMMAND_SEND_DATA:
// data pointer
pcData = (char *)&usBuffer[4];
// data length to send
ulDataLength = atoshort(usBuffer[2], usBuffer[3]);
#ifdef CC3000_TINY_DRIVER
if(ulDataLength > CC3000_APP_BUFFER_SIZE)
{
ulDataLength = CC3000_APP_BUFFER_SIZE;
}
#endif
pcSockAddrAscii = (pcData + ulDataLength);
#if 0
// the family is always AF_INET
tSocketAddr.sa_family = atoshort(pcSockAddrAscii[0], pcSockAddrAscii[1]);
// the destination port
tSocketAddr.sa_data[0] = ascii_to_char(pcSockAddrAscii[2], pcSockAddrAscii[3]);
tSocketAddr.sa_data[1] = ascii_to_char(pcSockAddrAscii[4], pcSockAddrAscii[5]);
// the destination IP address
tSocketAddr.sa_data[2] = 255; //ascii_to_char(pcSockAddrAscii[6], pcSockAddrAscii[7]);
tSocketAddr.sa_data[3] = 255; //ascii_to_char(pcSockAddrAscii[8], pcSockAddrAscii[9]);
tSocketAddr.sa_data[4] = 255; //ascii_to_char(pcSockAddrAscii[10], pcSockAddrAscii[11]);
tSocketAddr.sa_data[5] = 255; //ascii_to_char(pcSockAddrAscii[12], pcSockAddrAscii[13]);
sendto(ulSocket, pcData, ulDataLength, 0, &tSocketAddr, sizeof(sockaddr));
#else
// the source port 7999=0x1F3F;
tSocketAddr.sa_data[0] = 0x1F; //ascii_to_char(usBuffer[2], usBuffer[3]);
tSocketAddr.sa_data[1] = 0x3F; //ascii_to_char(usBuffer[4], usBuffer[5]);
tSocketAddr.sa_data[2] = 255;
tSocketAddr.sa_data[3] = 255;
tSocketAddr.sa_data[4] = 255;
tSocketAddr.sa_data[5] = 255;
// all 0 IP address
//memset (&tSocketAddr.sa_data[2], 0, 4);
bind(ulSocket, &tSocketAddr, sizeof(sockaddr));
//test second socket;
while(1){
sendto(ulSocket, (unsigned char*)pcData, sizeof(pcData), 0, &tSocketAddr, sizeof(sockaddr));
//delay_ms(1000);
}
#endif
break;