jeffhe1 发表于 2018-11-5 18:07:51

請問 ESP8266 , ESP8266_ReceiveString()在 main 裡 , 無法正常收data?

我是使用霸道者 STM32F103ZET6 , 火哥的 wifi 透傳 demo code 修改, esp8266 當 STA , PC 當 server , PC送 data 給 ESP8266 接收,
但在 main() 調用 ESP8266_ReceiveString() ,無法正常接收資料 , 但在 ESP8266_ReceiveString() , 可以看到正常收到的 data, 不知道有哪位大神 可以幫忙解答一下 , 真的跪求 ,感恩不盡 > . < !


char *test;


test = ESP8266_ReceiveString(0);


   macPC_Usart ( "test=%s\n", test );





踏平幼稚园 发表于 2018-11-6 09:37:00

pRecStr赋值判断是不是写错了,函数里走的是else分支但其中没有对pRecStr幅值,main函数里返回的是空指针
moz-extension://4fcec6a8-71d0-4b93-b72d-b55140e7d883/static/sound.svg






jeffhe1 发表于 2018-11-6 09:55:55

本帖最后由 jeffhe1 于 2018-11-6 09:57 编辑

踏平幼稚园 发表于 2018-11-6 09:37
pRecStr赋值判断是不是写错了,函数里走的是else分支但其中没有对pRecStr幅值,main函数里返回的是空指针

...
那個是由 server 發 data 給 esp8266 wifi module, 再給 STM32 uart , 根據模式 ,放進 strEsp8266_Fram_Record .Data_RX_BUF , 然後再指定 給 pRecStr(pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;)
應該沒有錯:L且再函式裡 , data 都可正確打印出來

踏平幼稚园 发表于 2018-11-6 18:13:26

本帖最后由 踏平幼稚园 于 2018-11-6 18:17 编辑

jeffhe1 发表于 2018-11-6 09:55
那個是由 server 發 data 給 esp8266 wifi module, 再給 STM32 uart , 根據模式 ,放進 strEsp8266_Fram_Re ...
第一张图   pRecStr = strEsp8266_Fram_Record .Data_RX_BUF是 if 判断为真才会执行,之所以第一张图能显示串口信息是走了else分支。

楼主自己看看第一张图里的代码
{
    char* pRecStr= 0;
    if(真)
    {
      //程序根本没走到这
      pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
    }
    else
    {
      //程序走的这里
      print("...");//所以这里调用print能打印
    }
    return pRecStr; //由于if为假,pRecStr没有赋值还是NULL;
}


你试试把上面的"return pRecStr;"改成"return strEsp8266_Fram_Record .Data_RX_BUF;",main函数里肯定能打印


moz-extension://4fcec6a8-71d0-4b93-b72d-b55140e7d883/static/sound.svg






jeffhe1 发表于 2018-11-7 08:42:48

踏平幼稚园 发表于 2018-11-6 18:13
第一张图   pRecStr = strEsp8266_Fram_Record .Data_RX_BUF是 if 判断为真才会执行,之所以第一张图能显 ...

樓友抱歉:L , 你看到的是我 debug 時 , 故意 mark 掉的 , 實際函式如下 , 無論 if () 是或否 , 都會有值填入 pRecStr , 只是在 main () 裡呼叫 , 就不會有正確的 data

/*
* 函数名:ESP8266_ReceiveString
* 描述:WF-ESP8266模块接收字符串
* 输入:enumEnUnvarnishTx,声明是否已使能了透传模式
* 返回: 接收到的字符串首地址
* 调用:被外部调用
*/
char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
        char * pRecStr = 0;
       
       
        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;

        }

        return pRecStr;
       
}

hu9977 发表于 2018-11-7 09:22:36

这个数应该是通过串口中断接受的,先看看串口有没有收到数据

jeffhe1 发表于 2018-11-7 09:26:14

hu9977 发表于 2018-11-7 09:22
这个数应该是通过串口中断接受的,先看看串口有没有收到数据

有的, 我在函式裡 , 是可以打印出正確的 data

hu9977 发表于 2018-11-7 09:38:37

jeffhe1 发表于 2018-11-7 09:26
有的, 我在函式裡 , 是可以打印出正確的 data

那应该问题不大。仔细检查打印是否执行,打印的buf是否有数据

踏平幼稚园 发表于 2018-11-7 09:51:05

jeffhe1 发表于 2018-11-7 08:42
樓友抱歉 , 你看到的是我 debug 時 , 故意 mark 掉的 , 實際函式如下 , 無論 if () 是或否 , 都會有值 ...

if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
还是判断啊,判断逻辑假,依然不会赋值。建议楼主编译选项设置成none,然后下断点看看pRecStr赋值有没有走到吧。

jeffhe1 发表于 2018-11-7 11:21:52

hu9977 发表于 2018-11-7 09:38
那应该问题不大。仔细检查打印是否执行,打印的buf是否有数据

函式裡有打印出來正確值 , 到main() 裡 打印出來是亂碼
页: [1] 2
查看完整版本: 請問 ESP8266 , ESP8266_ReceiveString()在 main 裡 , 無法正常收data?