首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过TCP发送数据时清除Cortex-m硬故障

通过TCP发送数据时清除Cortex-m硬故障
EN

Stack Overflow用户
提问于 2019-07-30 19:13:03
回答 1查看 193关注 0票数 1

我有一个TCPSocket*对象,它包含与客户端的连接。此对象被传递给另一个对象以将数据发送回客户端:

代码语言:javascript
复制
uint32_t count = 10;

char* message = new char[4];

message[0] = count & 0xff;

message[1] = (count >> 8) & 0xff;

message[2] = (count >> 16) & 0xff;

message[3] = (count >> 24) & 0xff;

client->send(&message, 4);

当调用程序的这一部分时,以下内容出现在串行线路上,客户端没有接收到任何数据:

代码语言:javascript
复制
    ++ MbedOS Fault Handler ++



                                                                                                          FaultType: HardFault



                                                                                                                              Context:

   R0   : 00000000

                  R1   : 10008000

                                 R2   : 00000004

                                                R3   : 2007C000

                                                               R4   : 10000914

                                                                              R5   : 00000000

                                                                                             R6   : 00000000

                                                                                                            R7   : 10004330

                                                                                                                           R8   : 10004320

       R9   : FFFFF435

                      R10  : 00000000

                                     R11  : 00000000

                                                    R12  : 00012AC1

                                                                   SP   : 10002AF0

                                                                                  LR   : 0000D1A1

                                                                                                 PC   : 00005938

                                                                                                                xPSR : 21000000

                                                                                                                               PSP  : 10002AD0

           MSP  : 10007FD8

                          CPUID: 412FC230

                                         HFSR : 40000000

                                                        MMFSR: 00000000

                                                                       BFSR : 00000082

                                                                                     UFSR : 00000000

                                                                                                     DFSR : 0000000A

                                                                                                                    AFSR : 00000000

                                                                                                                                   BFAR : 10008010

               Mode : Thread

                            Priv : Privileged

                                             Stack: PSP



                                                       -- MbedOS Fault Handler --







                                                                                 ++ MbedOS Error Info ++

                                                                                                        Error Status: 0x80FF013D Code: 317 Module: 255

                   Error Message: Fault exception

                                                 Location: 0xD337

                                                                 Error Value: 0x5938

                                                                                    Current Thread: main  Id: 0x10002B48 Entry: 0xD7D7 StackSize: 0x1000 StackMem: 0x10001B48 SP: 0x10007F88

                                                          For more info, visit: https://armmbed.github.io/mbedos-error/?error=0x80FF013D

     -- MbedOS Error Info --

所有的东西都在一条线上,所以我看不出是什么原因造成的。

这些是该方案的相关部分:

主要:

代码语言:javascript
复制
// Network interface
EthernetInterface net;

TCPSocket listener; //listens for incoming connection requests
TCPSocket* client;

CommandProcessor commandProcessor(client);

int main() {

    int remaining;
    int rcount;
    char *p;
    char *buffer = new char[16];
    nsapi_size_or_error_t result;

    int n = net.set_network("192.168.1.103","255.255.255.0","192.168.1.2");
    pc.printf("\n Success? %d\n", n);
    net.connect();

    listener.open(&net);
    listener.bind(3045);

    listener.listen(1);

    client = listener.accept(NULL);
    client->set_timeout(1000);

    led1 = 1;

    while(1) {
        int remaining = 16;
        int rcount = 0;
        p = buffer;

        while (remaining > 0 && 0 < (result = client->recv(p, remaining))) {
            p += result;
            rcount += result;
            remaining -= result;
        }

        if (remaining == 0) //full message received
        {
            commandProcessor.process(buffer);
        }
    }
}

CommandProcessor:

代码语言:javascript
复制
CommandProcessor::CommandProcessor(TCPSocket* client)
{
    this->client = client;
}

void CommandProcessor::process(char* message)
{

    switch(message[0]) { //Command is first byte of message

        case 0x3: { 

            uint32_t count = 10 ;

            char* message = new char[4];

            message[0] = count & 0xff;
            message[1] = (count >> 8) & 0xff;
            message[2] = (count >> 16) & 0xff;
            message[3] = (count >> 24) & 0xff;

            client->send(message, 4);
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 16:36:36

commandProcessorclientNULL,当你给commandProcessor.process(buffer)打电话时。

在从CommandProcessor获得指向套接字的指针之后,为什么不创建一个accept()实例。

代码语言:javascript
复制
CommandProcessor* commandProcessor;

client = listener.accept(NULL);
commandProcessor = new CommandProcessor(client);

commandProcessor->process(buffer);

或者,您可以使用这样的函数来设置client

代码语言:javascript
复制
void CommandProcessor::setClient(TCPSocket* client) {
    this->client = client;
}

用法:

代码语言:javascript
复制
client = listener.accept(NULL);
commandProcessor.setClient(client);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57278601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档