Adafruit Fona 3g库;这是如何工作的?

时间:2019-02-07 00:12:43

标签: c++ stm32 gsm mbed adafruit

我正在尝试通过3g和TCP连接将数据包发送到服务器。以下是我发现的.cpp和.h文件的链接:

https://os.mbed.com/users/Nels885/code/Adafruit_FONA_3G/

更具体地说,我对TCPSend类下的Adafruit_FONA_3G的工作方式感到困惑。我正在尝试实现它,但是我的代码似乎卡在函数packet[0] = 0;下的bool Adafruit_FONA_3G::TCPsend(char *packet)中。

我尝试注释掉packet[0] = 0;然后代码一直运行。我还尝试过在char* packet[32];之前初始化packet[0] = 0;,并且代码一直运行。我假设该功能未检测到数据包输入。

这是.cpp文件中的特定功能:

bool Adafruit_FONA_3G::TCPsend(char *packet)
{
    if (strlen(packet) > 0) 
    { 
        mySerial.printf("%s", packet);
        //mySerial.printf("%s\r\n", packet);
        readline();
        packet[0] = 0;
        return true;
    } 
    else 
        return false;
}

这是我的主要代码:

#include "mbed.h"
#include "Adafruit_FONA.h"

#define FONA_RST D4
#define FONA_TX D1
#define FONA_RX D0
#define FONA_RI D7 //not used

char replybuffer[255];


Adafruit_FONA_3G fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI);
Serial pc(USBTX, USBRX);

int main() 
{

    fona.TCPinitialize();

    char Timeout[21];
    fona.getTCPtimeout(Timeout);

    char * Server = "52.14.99.26";
    uint16_t Port = 10001;
    fona.TCPconnect(Server,Port);

    char *Packet = "Pick Up %";
    fona.TCPsend(Packet);

    fona.TCPclose();

}

1 个答案:

答案 0 :(得分:1)

Adafruit_FONA_3G::TCPsend()假定您为其传递了一个可写缓冲区。您正在传递一个只读缓冲区。因此,替换

char *Packet = "Pick Up %";

char Packet[] = "Pick Up %";

问题实际上是编译器允许您使用只读值初始化可写指针。这是您的编译器的缺点。