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.

[参考译文] RTOS/TM4C129XNCZAD:HTTP 服务器下载问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/582503/rtos-tm4c129xnczad-http-server-download-issue

器件型号:TM4C129XNCZAD

工具/软件:TI-RTOS

全部。

我在通过 http 协议下载文件时遇到了一个奇怪的问题。

我在电路板上设置了一个 http 服务器、以便将 存储在闪存文件系统中的内部文件导出 到本地 PC。

存储的文件 是正确的(我还通过 USB 协议进行了这样的导出、一切都很好)。

观察到的问题包括随机位置的一个错误半字节、例如:

-右半字节应为0001或0010或0100,但在文件中半字节变为1001或1010或1100。

此类错误始终位于第一个半字节和位#4中。

用于下载文件的代码如下所示:

----------------------------------

C 代码开始

------------------------------

totalBytesCopied = 0;

字节 Read = APPDATA_general_buffer_size;

byteSize = htmlFileSize;

https://SendStatusLine (htmlSock、HTTP_OK、content_Type_applet);//发送 HTTP 状态行*/

sprintf (httpBuffer,"内容处置:附件;fileName=%s;\r\n",&filename[1]);

httpSendClientStr( htmlSock、httpBuffer );

httpSendClientStr( htmlSock、"Accept-ranges: bytes\r\n");

sprintf( httpBuffer,"Content-Length:%d\r\n\r\n",htmlFileSize );

httpSendClientStr( htmlSock、httpBuffer );

while (true)

if (byteSize =0) break

if (byteSize < bytesRead){ bytesRead = byteSize;}

 memcpy( appDataGENC.buffer,(unsigned char*)(fatfsbuffer+totalBytesCopied ),bytesRead );

totalBytesCopied += bytesRead;

 RET = SEND (htmlSock、(char*) appDataGENC.buffer、bytesRead、0);

if (ret =-1){ os_Error("send socket error (-1)");break;}

if (ret < bytesRead){ os_Error("send socket error bytes");break;}

byteSize --= bytesRead;

----------------------------------

C 代码结束

------------------------------

现在、我将做更多的测试、但如果有任何关于此问题的建议、我将不胜感激。

此致、

Marco Cristellari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marco:
    缓冲区中的数据 fatfsuffer 是否与文件内容匹配? 您使用的是 TI-RTOS 的哪个版本?
    谢谢、
    Janet
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Janet。


    我使用的是 TI-RTOS 1.21.00.09





    是的、fatfsuffer 与内容匹配、这是我第一次进行检查。


    另一个考虑因素是 fatfsuffer 位于 SDRAM 中的一个部分、该部分从地址0x10000000开始。

    实际上、我使用的正确代码如下:

    字节 Written = 0;
    while (bytesWritten < bytesRead)

    appDataGENC.buffer[bytesWritten]= EPIWorkaroundByteRead (unsigned char*)(fatfsbuffer + totalBytesCopied));
    字节 Written++;
    TotalBytesCopied++;


    我已经完成了如下测试:

    appDataGENC.buffer[bytesWritten]='I';


    我在半字节上没有观察到奇怪的行为。 我将认为 SDRAM 中的读取过程出错。





    谢谢


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

    尊敬的 Marco:

    我们不确定问题出在哪、但您可以尝试以下一些操作:

    • 在其他电路板上运行应用。
    • 对 SDRAM 运行内存测试。  您可以尝试几种方法、例如"Walking 1"、"Walking 0"、"A5A5"和"5A5A"。  您可以在 Google 上找到这些内容。

    此致、

    Janet

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Janet、您好!
    我已经在三个不同的电路板上进行了测试。

    所有这些人都受到这种问题的影响。 为了获得更多信息、我已经完成了不同的测试。

    我已经用不同的模式和不同类型的访问(32/16/8位)完成了 SDRAM 测试。 SDRAM 正常。

    我已经对使用图形的插槽进行了类似的测试、没有问题。

    当系统从 SDRAM 读取数据并将数据放入套接字时、问题就会上升。

    我收集了大量数据(用于统计目的)、错误始终侧重于随机字节的位4、并且始终查找0而不是1。

    我想知道此类问题是否与 PCB 的特定数据路径有关。

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

    尊敬的 Marco:

    这是您自己的电路板还是 TI 电路板?  这听起来更像是硬件问题、而不是 TI-RTOS 问题。  如果您需要、我们可以将此帖子移至器件论坛。  他们可能对这个问题有更深入的了解。

    此致、

    Janet

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Janet、您好!
    如果您认为此问题与器件相关、让我们将此讨论移至器件。

    这可以为我效劳吗?

    此致、
    Marco