if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
还是判断啊,判断逻辑假,依然不会赋 ...
是假的話 , 不是透傳模式 , 走 TCP/IPprotcol , 封包裡會有標檔頭 " +IPD " , 我在這裡有打印出來正確的 data jeffhe1 发表于 2018-11-7 11:21
函式裡有打印出來正確值 , 到main() 裡 打印出來是亂碼
你把关键地方的函数代码贴出来,你的截图,看不清楚 hu9977 发表于 2018-11-7 14:55
你把关键地方的函数代码贴出来,你的截图,看不清楚
/*
* 函数名:ESP8266_ReceiveString
* 描述:WF-ESP8266模块接收字符串
* 输入:enumEnUnvarnishTx,声明是否已使能了透传模式
* 返回: 接收到的字符串首地址
* 调用:被外部调用
*/
char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
char * pRecStr = 0;
int c;
strEsp8266_Fram_Record .InfBit .FramLength = 0;
strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;
while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
if ( enumEnUnvarnishTx )
pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
else
{
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
//b = strncpy(a,strEsp8266_Fram_Record .Data_RX_BUF,c);
c = strlen(strEsp8266_Fram_Record .Data_RX_BUF);
macPC_Usart ( "c1=%d\n",c);
strncpy(a,strEsp8266_Fram_Record .Data_RX_BUF,c);
macPC_Usart ( "c2=%d\n",c);
//macPC_Usart ( "b=%s\n",b );
//pRecStr = &a;
macPC_Usart ( "3=%s\n",strEsp8266_Fram_Record .Data_RX_BUF );
macPC_Usart ( "4=%s\n",a );
}
return pRecStr;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
volatile uint8_t ucTcpClosedFlag = 0;
char cStr [ 1500 ] = { 0 };
char *test;
/**
* @briefESP8266 (Sta Tcp Client)透传
* @param无
* @retval 无
*/
void ESP8266_StaTcpClient_UnvarnishTest ( void )
{
uint8_t ucStatus;
char cStr [ 100 ] = { 0 };
printf ( "\r\n正在配置 ESP8266 ......\r\n" );
macESP8266_CH_ENABLE();
ESP8266_AT_Test ();
ESP8266_Net_Mode_Choose ( STA );
while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
ESP8266_Enable_MultipleId ( DISABLE );
while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
//while ( ! ESP8266_UnvarnishSend () );
printf ( "\r\n配置 ESP8266 完毕\r\n" );
sprintf ( cStr,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n" );
//ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 ); //发送数据
ESP8266_SendString ( DISABLE, cStr, 104, Single_ID_0 ); //发送数据
Delay_ms ( 100 );
// ESP8266_ExitUnvarnishSend();
while ( 1 )
{
/*
sprintf ( cStr,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n" );
ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 ); //发送数据
Delay_ms ( 100 );
*/
//ESP8266_ExitUnvarnishSend();
test = ESP8266_ReceiveString(1);
macPC_Usart ( "test=%s\n", test );
if ( ucTcpClosedFlag ) //检测是否失去连接
{
ESP8266_ExitUnvarnishSend (); //退出透传模式
do ucStatus = ESP8266_Get_LinkStatus (); //获取连接状态
while ( ! ucStatus );
if ( ucStatus == 4 ) //确认失去连接后重连
{
printf ( "\r\n正在重连热点和服务器 ......\r\n" );
while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
printf ( "\r\n重连热点和服务器成功\r\n" );
}
while ( ! ESP8266_UnvarnishSend () );
}
}
}
jeffhe1 发表于 2018-11-7 19:44
/*
* 函数名:ESP8266_ReceiveString
* 描述:WF-ESP8266模块接收字符串
你在函数里面打印的是strEsp8266_Fram_Record .Data_RX_BUF,pRecStr 是经过判断才赋值的,前面的兄弟也说过,建议将判断语句( if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) ))去掉,或者
return(char *) strEsp8266_Fram_Record .Data_RX_BUF.然后在看看数据是啥样的 我也遇到了相同的问题。。请问有人解决了吗 hu9977 发表于 2018-11-7 23:39
你在函数里面打印的是strEsp8266_Fram_Record .Data_RX_BUF,pRecStr 是经过判断才赋值的,前面的兄弟也 ...
你好
页:
1
[2]