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.

[参考译文] 当我尝试将 Energia#39以太网代码移植到 CCS 时、lwip 将 TCP 客户端结构保存到不可读取的内存中

Guru**** 2472980 points
Other Parts Discussed in Thread: ENERGIA

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/680293/lwip-saving-tcp-client-structs-to-unreadable-memory-when-i-tried-to-port-energia-s-ethernet-code-to-ccs

器件型号:TM4C1294NCPDT
主题中讨论的其他器件:Energia

您好!

我一直在尝试让 TCP 功能在 Code Composer Studio 中工作。 首先、我要简单地将 Energia 的以太网类别移植到 CCS。 自从我将它们放入 CCS 后、它们并没有真正改变、编译也很好。

在内部、它通过为 TCP 客户端使用结构数组来跟踪它们。 当我有多个 TCP 客户端时、它会突然出现硬错误。 我将其追溯到过去、发现包含结构体的 pbuf 由于某种原因开始使用不可读的存储器映射拒绝的存储器、因此当我尝试从其中读取客户端信息时、会抛出错误。 我的内存不是太小、对于堆和堆栈、它是0x10000和0x15000。 还有什么可能导致此类问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    导致此问题的代码在此文件中可用,这一行是在添加多个客户机后出现的。 这与我添加到 CCS 的唯一区别是、由于依赖 gcc、_SYNC_Fetch 和_null 宏被删除、并且在禁用所有中断的情况下、它在代码的某个原子部分中使用。

    我通过此代码调用它,它可以正常工作,直到 server.available ()失败的第二个客户端。  

    void roveCom_GetMsg (uint16_t* dataID、size_t* size、void* data)
    {
    uint8_t flags = 0;
    uint16_t seqnum = 0;
    roveIP senderIP;
    EthernetClient 客户端;
    
    *dataID = 0;
    *size = 0;
    client = tcpServer.available ();
    
    if (client && client.available ()!= 0)
    {
    for (int i = 0;i < client.available ();i++)
    {
    RoveCommBuffer[i]= client.read();
    }
    client.stop();
    RoveCommParseMsg (RoveCommBuffer、dataID、大小、数据、seqnum、 标记(&F);
    RoveCommHandleSystemMsg (RoveCommBuffer、dataID、大小、数据、seqnum、 flags、&client);
    }
    否则(roveEthernet_GetUdpMsg (&senderIP、RoveCommBuffer、sizeof (RoveCommBuffer))= Rove_ethernet_error_Success)
    {
    RoveCommParseMsg (RoveCommBuffer、dataID、大小、数据、seqnum、 标记(&F);
    RoveCommHandleSystemMsg (RoveCommBuffer、dataID、大小、数据、seqnum、 flags,senderIP);
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Drue、

    我们在 TivaWare 示例中包含了 LWIP 示例、为什么这些示例不可用于您?

    我们无法真正支持 Energia 开发的项目、因为在我们的 TM4C 团队中、我们对该平台一无所知。 此外、除了 TivaWare 示例提供的内容外、我们对 lwip 的了解不多。 因此、如果您不使用 TivaWare 示例、我认为我们无法帮助您解决您面临的问题...