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.

[参考译文] LAUNCHXL2-RM57L:无法将 LwIP 与 FreeRTOS 集成

Guru**** 2524460 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/866523/launchxl2-rm57l-cannot-integrate-lwip-with-freertos

器件型号:LAUNCHXL2-RM57L
主题中讨论的其他器件:HALCOGEN

您好!

我已从下载了 HTTP 示例

我遵循了中的指导原则

(我使用了新生成的 RM57/FreeRTOS 项目作为要复制的设置源)将对 FreeRTOS 的支持集成到该项目中。

我成功地合并了这两个世界,除了只有一个世界可以处于活动状态。 也就是说、如果未启动 FreeRTOS 内核、HTTP 服务器就可以正常运行。 内核启动后、不会执行 HTTP 操作。

vTaskStartScheduler()调用在调用 http_init()后立即添加,如以下已去除符号(并实际测试)示例所示:

int main (空)

   unsigned int ipaddr;
   struct in_addr devIPAddress;
   char * txtIPAddrItoA;

   gioInit();
   sciInit();

   IntMasterIRQEnable();
   _enable_FIQ ();

   uint8 ip_addr[4]={192、168、11、112};
   uint8网络掩码[4]={255、255、255、0};
   uint8 gateway[4]={192、168、11、254};
   ipaddr = lwIPInit (0、emacAddress、
           htonl (*(((uint32_t *) ip_addr))、
           htonl (*((uint32_t *)网络掩码))、
           htonl (*((uint32_t *)网关))、
           ipaddr_use_static);

   devIPAddress.s_addr = ipaddr;
   TxtIPAddrItoA =(char *) inet_ntoA (devIPAddress);
   LocatorConfig (emacAddress、"HDK enet_lwip");

   printf ("IP 地址:%s\n"、txtIPAddrItoA);

   pbuf_init();

   httpd_init();

   printf ("Start\n");

   char testChar;
   sciReceive (sciREG1、1、testChar);

   printf ("正在启动内核\n");
   vTaskStartScheduler();

   返回0;


对 sciReceive 的调用只会使调用内核的时间由用户控制。 HTTP 服务器在内核启动之前工作正常、此后它不再响应。

在此设置中、我能够运行常规任务、这表明 FreeRTOS 已正确集成-除了我似乎缺少的一些细节。

你有什么建议?

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

    大家好、Maciej、

    如果我正确理解您的问题,当您注释 lwip_init()和 httpd_init()时,它可以正常工作。 或者不按键盘启动调度程序、它也可以正常工作。

    是这样吗?

    雷克斯

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

    尊敬的 Rex:

    一旦调度程序启动,Web 服务器就会停止响应请求。 调度程序本身工作正常、可以管理常规任务(如果已创建)。

    通过提取第一个基本的 LwIP 调用(bind、listen、accept、recv)并在没有完整的 Web 服务器代码的情况下使用它们、我甚至能够进一步减少示例、只是为了检测网络引起的活动并使调试器更容易使用。 此示例中的整个 LwIP 实例似乎完全基于中断、我的印象是、这个机制被正在运行的 RTOS 调度程序遮挡(或"被劫持")。

    我还注意到、本示例中提供的 LwIP 版本已准备好用于非 RTOS 操作。 在一个程序中使用(尽管尚未有意混合)这两个程序,我期望的结果可能比实际支持的多。

    话虽如此,很高兴看到一个实际运行*来自* FreeRTOS 的 LwIP 堆栈的程序的工作示例,因为这种集成级别是我最终需要的。 这将使该板和软件堆栈与其他 TivaC 或 SimpleLink 类型的 LaunchPad 在联网方面立即处于同等水平。 嘿、这也是使用一些最新版本的 LwIP 的动机、因为1.4.1版本有些过时。

    或者、当我们看到它时、为什么不在 Hercules 上使用 TI-RTOS/NDK? 是否有任何特殊的原因未提供该信息(既不在 Resource Explorer 中、也不在 HalCoGen 中)?

    在任何情况下、我也将探讨第三方选项(如 Hercules 页面上所列)。

    此致、

    Maciej

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

    大家好、Maciej、

    我不确定之前 TI-RTOS 不在 Hercules 上的决策是什么。 但是、我们确实在 Hercules 上运行了 LWIP 示例:

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/Examples/Examples.html#lightweight-ip-lwip-demo

    还有其他客户在运行 FreeRTOS+LWIP:

    https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/190805

    您可能需要参考 FreeRTOS+LWIP 示例,其中 main()在 sys_main.c 中创建了2个任务 任务1启动 LWIP、任务2使用计时器节拍切换 HET[1]。 然后调用 vTaskStartScheduler()。 请尝试查看它是否有用。

    雷克斯

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

    尊敬的 Rex:

    您建议的第一个链接会导致*完全*与我在原始帖子中提到的同一个存储库。 这是我尝试与 FreeRTOS 集成的示例-失败了。

    第二个链接中的讨论内容如下:

    "我们没有 Hercules 的 lwIP 和 FreeRTOS 集成。 我们没有这种整合的计划。"

    "我还在尝试让 lwIP 在 TMS570 MCU 上与 FreeRTOS 配合使用。 但我直到现在才成功。"

    "实际上、即使我很长时间尝试将 FreeRTOS 与以太网进行连接。 它从未奏效。 而且、我也无法从 TI 获得太多帮助。"

    虽然在很深的地方有一小部分人几乎成功的痕迹,但这并不是很令人鼓舞。 尤其是在应该面向注重可靠性和质量的受众的电路板上。

    正如我已经说过的、我将尝试使用替代软件堆栈。

    此致、

    Maciej