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.

[参考译文] MSP-EXP432E401Y:网络服务 HTTP 服务器性能不一致。

Guru**** 652440 points
Other Parts Discussed in Thread: BOOSTXL-SHARP128, MSP-EXP432E401Y
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1122841/msp-exp432e401y-network-services-http-server-performance-inconsistencies

器件型号:MSP-EXP432E401Y
主题中讨论的其他器件:BOOSTXL-SHARP128

您好!

我一直在使用"simplelink_msp432e4_sdk_4_20_00_12" SDK 随附的网络服务代码中提供的 HTTPServer 模块来开发 Web 服务器。

我还向 MSP-EXP432E401Y 开发板添加了用于 SD 卡接口的 BOOSTXL-SHARP128 Booster Pack。  目前、我已修改示例项目"httpserver_MSP_EXP432E401Y_tirtos_ccs"、以从 SD 卡读取网页并 使用 HTTP 服务器发送。  我还有一些代码将解析 网页 并在发送动态数据之前插入动态数据。

我注意到,每当我通过 Web 浏览器访问网页时,网页的交付速度有一定的不一致之处。  有时网页将在一秒钟内加载,而其他时间网页加载则需要几秒钟,通常为5-7秒钟。  访问网页时、这是一个非常明显的差异。  这一切都是在本地网络上完成 的、只需在 MSP-EXP432E401Y 和我要测试的 PC 之间进行简单切换即可。

当我添加更多代码时、HTTPServer 的响应速度几乎随机变化。  有时、它会非常快速地加载网页、而有时它会以较慢的速度加载网页。  无论我使用哪种 Web 浏览器、都会发生这种情况。  我可以更改 HTTP 服务器的响应速度、有时只需注释掉或添加几行代码即可。  这是非常可重复的。

例如、如果我对其中一个函数进行小代码更改、HTTP 服务器会减慢速度。

static void writeHourEEPROM(char *value, uint8_t chanNum, log_eeprom_vars_t postVar)
{
    uint8_t hrVal = (uint8_t)atoi(value);

     /* Check if returned value is an error */
     if(hrVal == 0 && value[0] != '0')
         return;

     /* Check if a valid Hour Value */
//     if(hrVal >= 24)
//         hrVal += 20;

     const eepromVar_meta_t *tablePtr;
     tablePtr = log_EEPROM_Table[chanNum];    // Save Pointer to table for correct channel

     uint16_t eeWordVal = eepromRead_uint8(tablePtr[postVar]);

     /* If write is same as value read from EEPROM the exit */
     if(hrVal == eeWordVal)
         return;

     eepromWrite_uint8(hrVal, tablePtr[postVar]);
}

此版本的函数会导致 HTTP 服务器运行缓慢。  如果我按如下方式取消注释函数中的两行、然后重新编译工程、HTTP 服务器将以更快的速率处理页面。

static void writeHourEEPROM(char *value, uint8_t chanNum, log_eeprom_vars_t postVar)
{
    uint8_t hrVal = (uint8_t)atoi(value);

     /* Check if returned value is an error */
     if(hrVal == 0 && value[0] != '0')
         return;

     /* Check if a valid Hour Value */
     if(hrVal >= 24)
         hrVal += 20;

     const eepromVar_meta_t *tablePtr;
     tablePtr = log_EEPROM_Table[chanNum];    // Save Pointer to table for correct channel

     uint16_t eeWordVal = eepromRead_uint8(tablePtr[postVar]);

     /* If write is same as value read from EEPROM the exit */
     if(hrVal == eeWordVal)
         return;

     eepromWrite_uint8(hrVal, tablePtr[postVar]);
}

可以看出、对函数的更改微不足道、不应影响 HTTP 服务器的代码。  这只是我在编码时多次看到它的一个。

有时、只是更改构建选项中的优化也会更改 HTTP 服务器的响应速度、而优化速度不一定会导致 HTTP 服务器更快地响应。  它可能会导致 HTTP 服务器响应速度较慢。

我的本能告诉我、代码的放置中有导致此问题的东西、但我不知道为什么。   

如果有人对可能导致此问题的原因提出任何建议、我们将不胜感激。

谢谢、

Josh

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

    Josh、您好!

    如果您认为它与代码放置有关、则可以对生成的.map 文件进行比较、以查看是否有任何可疑的内容。

    但是、似乎有些例程可能对时间敏感、从而导致比赛条件。 我建议在 CCS 中使用 ROV 来查看代码大部分时间花在何处。

    此致、

    Evan

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

    谢谢 Evan、

    我将研究您的建议、看看我是否能找到任何东西。

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

    您好 Evan、

    我已经对 ROV 做了一些测试、到目前为止、每次在 ROV 以调试模式运行时运行代码 、HTTP 服务器都很快速。在 ROV 视图中、我没有注意到任何奇怪的东西。 关闭调试模式而不更改任何代码后、HTTP 服务器将恢复到较慢的响应速度。   

    我不确定这是什么、但这可能是一个线索。

    Josh

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

    感谢您的更新。

    调试器可能会影响程序的执行时间线。 如果在连接调试器的情况下程序的行为发生变化、这也可能表明程序中的某个位置存在竞态条件。  

    您是否有任何需要很长时间才能执行的例程或任务、这些例程或任务会阻止其他任务得到服务。 您在上面的代码中展示了一个 EEPROM 函数、它可能会卡在那里吗? 还是其他地方?

    另一个调试选项是在您进入和退出某些任务时切换 GPIO。 这也可以让您了解应用程序在何处花费时间或陷入困境。 当然、GPIO 调用具有很小的开销、这可能会也可能不会影响您的竞态条件(如果它是竞态条件)、因此您可能必须进行实验。  

    希望这会有所帮助。 如果您有更多问题、请回帖。

    此致、

    Evan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="416841" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forume/1122841/MSP-exp432e401y-network-services-server-performance-http/4166326#4166326">、您还可以在遇到应用程序时间不一致或时间不一致的情况时发现一些问题。 当然、GPIO 调用具有很小的开销、这可能会也可能不会影响您的竞态条件(如果它是竞态条件)、因此您可能必须进行实验。  [/报价]

    统计函数分析 可能会有所帮助、无需检测代码即可切换 GPIO。

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

    感谢您分享切斯特!

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

    感谢大家的反馈。

    我将探索这两个选项并查看我可以确定的内容。

    最棒的

    Josh