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/TM4C1294NCPDT:如何链接到 NDK?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/607365/rtos-tm4c1294ncpdt-how-do-you-link-to-the-ndk

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

你好。

我正在尝试使用 TM4C1294XL Launchpad 上的 NDK 构建一个简单的入门级程序。   CCS 6.2、NDK 2 25 1 11

1)我没有使用 XGCONF、因为1)我已经在 NDK 上尝试过它、 2)它没有我想要内置的服务器3)我需要学习使用没有它的 NDK、因为: 4) 4)当我使用示例时、它会起作用、当我尝试修改它时、我仍然会遇到与下面描述的链接器问题相同的问题。

我花了5天的时间尝试解决这个问题。  我 从头到尾阅读了 NdkApiUserGuide (spru523j)

到目前为止、我只是尝试调用初始函数"NC_SystemOpen"、这已经是一场噩梦。

在一个简单的 SYS/BIOS 任务内进行这个简单的调用:

void taskFxn (UArg a0、UArg A1){
system_printf ("enter taskFxn ()\n");

INT 结果;
句柄 hCfg;
结果= NC_SystemOpen (NC_Priority_LOW、NC_OPMODE_INTERRUPT); 
NC_SystemClose (); system_printf ("exit taskFxn ()\n"\});

自然、我会得到一个未定义的符号。 (其他人称为未解析的外部)、如果我没有链接到库、我会期望这一点。 NDK 参考文档未告诉我要链接到哪个库。  但用户指南确实提供了一些提示。

我向 链接器添加了"netctrl.aem4"、并转到61个未定义的符号。 ( NIMUInit、 _llSerialInit、 httpOpen 等)  我开始挖掘、并添加更多的库来尝试处理这些库。  添加 OS 和 OS_SEM 会将其降为49个未定义的符号。  我添加 了 NetTool、它达到了51。  我添加 了 stk6、我将向下计数到11个未定义的符号。  最后、似乎您必须"逐层"链接器中的每个库才能将其解析。

剩下的是下面列出的"低级串行"函数和"低级计时器"函数。 它们在哪里?  我会为它们链接到哪些库?  已通过 XGCONF 添加了"定时器"支持、因此这些函数必须来自其他位置。  我也不知道低级串行数据的来源。

此外、还有一个未定义的"NIMUDeviceTable"、未在 NDK API 参考指南或用户指南中的任何位置定义。 它似乎与 NSP 有关、其中一半的 NDK 文档告诉您必须安装、一半的论坛告诉您不需要。

未定义 第一个参考
符号 文件中
------ --------
NIMUDeviceTable C:/ti/ndk_2_25_01_11/packages/ti/ndk/stack/lib/stk6.aem4 
llSerialInit C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
_llSerialServiceCheck C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
llSerialShutdown C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
llTimerInit C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
llTimerShutdown C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
llUserLedInit C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
_llUserLedShutdown C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
llSerialService C:/ti/ndk_2_25_01_11/packages/ti/ndk/netctrl/lib/netctrl.aem4 
llTimerGetStartTime C:/ti/ndk_2_25_01_11/packages/ti/ndk/os/lib/os.aem4 
llTimerGetTime C:/ti/ndk_2_25_01_11/packages/ti/ndk/os/lib/os.aem4 

P.S.  我还尝试根据 Wiki 重新构建 NDK。  但是、它失败了、因此我使用的是在软件包中编译的原始库。

如果有人想查看整个项目、我可以发布它。  但是、这是一个入门级的基本问题、有经验的人应该能够告诉我要链接到哪些库。

谢谢。

-CSW



  NC_SystemClose ();  System_printf ("exit taskFxn ()\n"\});

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪个版本的 TI-RTOS? 如果您使用的是2.16.xx、则需要提供 NIMUDeviceTable 变量。 我们在网络示例中的 EK_TM4C129EXL.c 文件中提供了该文件。

    关于其他函数、当您使用 XGConf 时、会自动选取必要的库。 您可以构建其中一个预设示例(例如 TCP Echo 或 TCP Echo IPv6)、并在 debug/configPkg 中查看生成的 linker.cmd 文件。 您可以看到需要添加的 NDK 库。 注意:可能比您需要的更多、但使用它们并不会造成伤害。

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

    Todd、

    感谢您的回复。

    我想 TI-RTOS 不是 SYS/BIOS?  每天我都会感到更加困惑…

    我正在使用 BIOS_6_46_02_47、它会创建任务。  我从一个原始"任务"演示开始、并猜测它是为了添加 NDK 代码(在任务中)。

    在 RTSC 下没有为 TI-RTOS 选择任何内容。  

    我选择了2.16.1.14 (我的唯一选择)、并将其添加到我的小演示中

    将 TI-RTOS 添加到编译中没有任何区别。

    我引入了一个简单的网络程序。  它使用 SYS/BIOS 和 TI-RTOS。

    我在调试文件夹下找到了 linker.cmd 隐式方法。  它使用中的所有封装

    C:\ti_tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\packages/ti\NDK。  

    不是 C:\ti\ndk...的根级别上的 NDK 包。  奇怪...?

    我将文件夹"NDK"中的所有内容(库和路径)迁移到了我的小型演示。 其中有12个。  这将其简化为 NIMUDevice 表。  我进行了搜索、找到了128个不同的文件、分别是 EK_TM4C129EXL.C.  每个都具有相同的日期/时间和相同的粗糙大小。  我找到了 NDK 示例中的一个文件。  

    我复制了表格、然后发现需要添加两个新的标题。

    然后、它为我提供了一个未定义的"Hwi_handle"。  我希望它位于"m4"目录中的"hwi.h"中。  但很显然、您不会将一个用于"M4 "器件、而是使用头文件的相同"m3"文件夹。

    现在、它链接时找不到"EMACSnow_NIMUInit"。  "EMACSnow.h"刚刚说:"NIMUDeviceTable"中需要此函数。

    问题是 UI XGCONF 添加了"部分"库、我不知道它们是什么。  工作的演示项目具有类似22的内容。  我尝试链接的样片有6个。

    我正在尝试对配置脚本中包含的内容进行分类、这些内容是我必须添加的内容。

    我现在完全困惑了自己、我不知道如何将这些内容联系起来:  
    我导入的网络项目同时使用 SYS/BIOS 和 TI-RTOS 来实现 Tiva-C  但是!  Tiva-C 文件夹中还有另一个 SYS/BIOS。  链接器.cmd 会将*所有*库列为来自"C:\ti_tirtos_tivac_2_16_01_14\products\BIOS_6_45_02_31\packages/ti"的库。
    我的简单演示项目使用 SYS/BIOS、我添加了 TI_RTOS。 但这没什么。  它从  C:\ti\BIOS_6_46_02_47\packages 获得*全部*它是 SYS/BIOS 软件包  我不能只是随机混合它们。  现在有些是基于配置脚本的、有些则不是来自所有不同的位置。

    该系统成功地让30多年的开发人员感觉自己像一个白痴...

    -CSW

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在功能以太网示例中有系统地精心制作了24个库、以匹配小型演示中的库。 所有这些都是通过使用链接器 cmd 文件并调整路径来实现的。

    我还复制了 EK_TM4C1294VL 文件、因为它具有大量的函数、这些函数在我的项目中被大量增加为未解析。

    结果是,我还有21个没有解决的问题。 每一个都以"EMAC..."开头 每一个都来自 EMACSnow.oem4f。 根据我所读的内容、我假设它们与 NSP 相关。 但是、有些帖子说您不再使用 NSP。

    以太网示例演示会解析这些函数。 但没有什么可以让我知道如何让我的演示做到这一点、因为我正在尝试在没有 XGCONF 工具的情况下完成演示。

    正如我说过的、我已经逐步完成了用户指南、这是有道理的。 您无法链接到它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Todd、
    我看到(从几年前开始、在现在已经关闭的线程上)您也已经解决了 ARM Cortex A8的这些问题。 我遇到的问题比我在这里写的尝试执行 BBB 时遇到的问题更严重。 (添加 NDK、在链接器中获取225个未定义的符号)

    你可以告诉我吗? 我已获得授权、可以与他人签订培训合同。 但我甚至无法得到名称。
    思维模式计划进来、但由于他们自己的承认、他们不在 NDK 上。
    -CSW
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Christopher、

    SYS/BIOS 是一款独立产品、但实际上只是一个内核。 几年前、我们开始提供 TI-RTOS 产品。 它将多种不同的产品捆绑在一起。 用于 TivaC 的 TI-RTOS 包括:SYS/BIOS 内核、NDK、UIA 和支持 RTOS 的驱动程序(例如 UART、SPI 等)。 这些驱动程序构建在低级 TivaWare driverlib 之上。 我们还提供适用于其他 MCU 器件(MSP430、MSP432、CC13xx 等)的 TI-RTOS 产品。 展望未来、用于其中多个 MCU 器件的 TI-RTOS 产品将被 SimpleLink SDK 所取代。 例如 SimpleLink CC32xx SDK、SimpleLink MSP432 SDK 等 这些 SimpleLink SDK 还支持 FreeRTOS 和非 RTOS。 希望这会清除产品。

    对于您、我强烈建议您使用适用于 TivaC 的 TI-RTOS、而不是占用 SYS/BIOS 和 NDK。 借助 TI-RTOS、我们提供了 EMAC 驱动程序以及网络示例。

    您能否确认您可以构建(并运行) TCP 回显(IPv4或 IPv6)。 示例? 同时、我将获得相应的步骤、以展示如何将此示例转换为不使用.cfg 来配置网络部件。

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

    您好 Todd、

    是的、我可以运行 TCP Echo Fine。  它是 DHCP、我可以使用我的 PC 对其执行 ping 操作。  我还可以运行 HttpGet、几乎可以运行任何其他示例、而不会出现任何问题。  它正在建设我自己的那种很困难的东西。  (此外、只需获取一个现有的工作示例、然后"添加 HTTP 服务模块"就会生成6个未解析的链接器错误...  因此、修改现有示例也不能解决我的问题)

    我正在比较两个有效的示例项目: HttpGet 和 tcpEcho 与我的未链接的测试程序。  (他们使用 GCC、我的测试项目使用 TI…… 我还在尝试使用 GCC 编译器进行测试项目... 不同类型的问题)

    我注意到、使用 XGCONF 时、HttpGet 和 EchoTCP 都没有在 UI 中为 CFG 文件选择"DHCP Client"。  但这两个样本都设法从我的 DHCP 服务获取 IP 地址。  近况如何?

    我还注意到、HttpGet 项目的 linker.cmd 文件正在添加"ns_1_11_00_10\packages/ti\net\lib\network_ndk.am4fg"和"ns_1_11_00_10/packages/ti\net\http\lib\http_ndk.am4fg"  

    它是如何决定添加这些内容的?   我可以在右侧(大纲)看到为 HttpGet 列出了"HTTP"、但我找不到方法将其添加到另一个项目中。  换句话说、示例只是"包含"它、但 CCS 不会让您将其添加到项目中。  此外、我认为不再需要 NSP?  我看到维基声明声称这一点。  但是、我的 TIRTOS-TIVAC 内部有一个 NSP 封装、并且 C:\TI 的根目录下有一个 NSP 封装。  它们并不是几乎相同的。

    返回到原始主题:
     将 NIMUDeviceTable 添加到"main.c"后、会生成更多链接器错误。  缺少 EMACAddrSet、EMACConfigGet。。 SysCtlPeripheralEnable 等 ...  其中21个是准确的。  因此、我决定只将整个"EK_TM4C1294XL.c"文件复制到我的项目中、因为它的来源是该文件。  不变。  我还向编译中添加了"network_NDK"库。  不变。  (同样 ,network_NDK 出现在 HttpGet 示例中,但不出现在 TcpEcho 示例中...?)

    总结一下。  我尝试将 EchoTcp 和 HttpGet 链接器脚本中使用的库与我的项目匹配。  但在链接器阶段、我的工程仍然缺少符号:

    以下是链接器脚本中的库、这些库由我的项目的 CFG 生成:

    l"C:\Source\Embed\TI\NetworkSamtos\Debug\configPkg\package\ccfg\app_pem4f.oem4f"
    -l"C:\Source\Embed\TI\NetworkSamples\src\arm\SYSBIOS\SYSBIOS.aem4f"-l"ti\tirti\tid\tex14_rts14_rts\cmware\tids14_rts14_rts\cm64_packages\cmv_rts\cm64_rts\cl\ts\cm64_rts\cmvac\ts14_rts\cm64_rts\cl\ts\cm64_rts\cl\ts\cm64_rts\cl\ts\cl_rts\cmvac\ts14_rts14_rts\cm64_rts\cl\ts\cl\ts\cm64_rts\cl\ts\cmware\ts\cm64_rts\cm64_rts\cm64_rts\cm64
    
    
    
    

    以下是我手动添加到项目配置 的库(具有正确的路径、例如"${COM_TI_RTSC_TIRTTOSTIVAC__NDK}/包..." 和"${COM_TI_RTSC_TIRTTOSTIVAC_TIDRIVERS_TIVAC"}/封装... "):  

    "libc.a"
    "hal_timer_BIOS.aem4f"
    "os.aem4f"
    "hal_userled_stub.aem4f"
    "hal_eth_stub.aem4f"
    "cgi.aem4f"
    "hdlc.aem4f"
    "console_ti_ti_ti.aem4f.aipv4f""aemv4f_emf_aemf_ipv4f_aemf"
    
    
    
    
    
    
    
    
    
    

    缺少符号的列表为:

    未定义 第一个参考
    符号 文件中
    ------ --------
    EMACAddrSet C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACConfigGet C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACConfigSet C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACFrameFilterSet C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACInit C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACIntClear C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACIntDisable C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACIntEnable C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACIntStatus C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMAPPHYConfigSet C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMAPPHYREAD C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMAPPHYWrite C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACRxDMA 描述符列表集 C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACRxEnable C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACTxDMA 描述符列表集 C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACTxDMAPolland C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMACTxEnable C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    EMAC_CONFIG C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    SysCtlPeripheralEnable C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    SysCtlPeripheralReady C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    SysCtlPeripheralReset C:/ti/tirtos_tivac_2_16_01_14/products/tidrivers_tivac_2_16_01_13/packages/ti/drivers/lib/drivers_tivaware.aem4f 
    

    我还遇到错误:  

    程序将不能放入可用的内存中。 ".bss"段的运行定位失败 

    但是、这是我在了解这些链接器问题后会担心的问题。

    因为您应该能够猜测、我正在深入探讨这一点。  但没有取得进展。  任何协助都是值得赞赏的,任何关于实际培训的推荐也是很好的。

    -CSW

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

    您好、Christopher、

    我们能否后退一步?

    [引用 user="Christopher Weber">我不使用 XGCONF 是因为1)我已经在 NDK 上尝试过它、 2)它没有我想要的内置服务器3)我需要学习如何在没有它的情况下使用 NDK、因为: 4) 4)当我使用示例时、它起作用、当我尝试修改它时、我仍然会遇到与下面描述的链接器问题相同的问题。

    您能否提供有关此方面的更多详细信息? 您正尝试添加(但无法添加)哪些新功能。

    [引用用户="Christopher Weber"]

    到目前为止、我只是尝试调用初始函数"NC_SystemOpen"、这已经是一场噩梦。

    [/报价]

    正如您发现的、这可能比预期的要复杂。 我可以帮助您定义自己版本的 NDK 堆栈线程、但首先我想了解有关上述内容的更多信息。

    Steve

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

    [引用 user="Christopher Weber">我正在比较两个有效的示例项目: HttpGet 和 tcpEcho 与我的测试程序不链接。  (他们使用 GCC、我的测试项目使用 TI…… 我还在尝试使用 GCC 编译器进行测试项目... 存在不同类型的问题)

    还应提供使用 TI 工具构建的这些示例的版本。 您是否无法找到它们?

    我建议导入这些文件、因为您的项目使用的是 TI 工具。 使用 GCC 与 TI 工具只是另一种变体、会增加目前的混淆。

    Steve

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

    您好 Steve。

    我的主要目标是在不依赖 XGCONF 工具的情况下构建项目和链接、因为75%的时间都不起作用。 它会给我一个错误。

    抱歉、创建此编辑器时遇到问题。 抛出意外异常。
    org.eclipse.rtsc.xdctools.invalid_CodeGen_location:无效的代码生成位置 

    当长期目标是加快现有项目的进度时、"已知问题"和"升级到此类问题"等答案不是一个好的解决方案。

    除此之外、我无法成功修改示例、而不会导致编译器或链接器错误。  例如:

    导入 TM4C1294XL 示例 HttpGet。  构建、加载、调试。  看到它连接到"www.example.com 没有问题、除了我不需要客户端。 我需要一台服务器。  如果 STARS 保持一致、并且尾风良好、我可以启动 XGCONF GUI、因此我"将"HTTP 服务器模块添加到我的配置"。  添加一个实例"http0"。 然后尝试构建。

    在函数`httpClientProcess:
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c:331:对`efs_filecheck'
    的引用未定义/db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    
    
    
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:352:对`efs_loadfunction'的引用未定义 C:\ti_tirtos_tifg_2_16_01_14\products\NDK_2_25_00_09\packages/efs\buti\lib\Netfgfgfg_2_16_01_14\products\products\undefined ````
    `/db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:undefined file4282':undefined to unefinfefined_fifture_en_en_en_en_en_enchinf:/db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:unefinefinf:undefined file4282' 

    首先、"httpClientProcess"和"https://SendFullResponse"不是我的模块之一、它似乎属于 NetTool_IPv4.am4fg。  库正在寻找应该提供的内容。

    我不知道这些 efs_xxxx 函数。 NDK 用户指南未提供有关它们的任何信息。  但 NDK 参考指南确实指出:  

    2.6: 本文档的下一部分讨论了对堆栈库中内置的流 IO 的支持。
    该部分中记录的支持旨在增强本机提供的基本功能
    操作系统(在堆栈被移植到新环境的情况下)。

    这似乎表示这些函数"内置于堆栈库中"。  或者至少"本机操作系统提供的基本功能"。  嗯、如果是、我找不到库来解析它们。

    我可以看到具有(或覆盖)基于文件系统的函数的值、但我在这里不需要这样做。  我最初的"自我教授"是将我的现有 Windows/Linux HTTP 服务器移植过来、并让它对我的系统现在使用的休息和状态机条件做出反应。  (我的现有软件使用 Windows 和 Linux、我们希望将其迁移到嵌入式环境中、而且我被要求为现有项目提供支持。)

    总之 、我无法成功增强现有示例、也无法将 NDK 链接到"从头开始制作"项目。

    作为 "老学校"、我宁愿使用 make 文件或 IDE 项目文件管理我的项目、而不是使用 GUI 激活我无法控制的预定义软件包。

    我希望这能更好地理解:1)我要实现的目标;2)我遇到的困难

    -CSW

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

    Steve、
    此外、《NDK 参考指南》(SPRU524)指出:
    此 API 与为套接字提供的流 API 无关。 如果需要此功能的服务
    不需要 API、则可以从 OS 抽象中丢弃此模块。 目前、
    只有 HTTP 服务器服务使用此 API。

    嗯、我不需要它。 但它不会说*如何*放弃它。
    它也不会提示我在2540头文件中、哪些文件具有所需的 efs_file *定义

    是否有任何想法、要为我节省搜索每个头文件的小时数?

    -CSW

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

    好的、您看到的问题似乎是由 XGCONF 工具的一些问题引起的。  此工具是可选的-它只是一种以图形方式修改配置的方法。  您无需使用 XGCONF 工具、只需直接修改*。cfg 配置文件即可、该文件是使用 JavaScript 编写的。

    鉴于您遇到的问题、我建议您尝试此方法、因为基础工具将链接到您所需的 NDK 库中。

    现在、在我们继续之前、我想通知您、NDK 仅支持 HTTP 1.0。  只需确保这不会对您造成问题。

    [引用 user="Christopher Weber">导入 TM4C1294XL 示例 HttpGet。  构建、加载、调试。  看到它连接到"www.example.com 没有问题、除了我不需要客户端。 我需要一台服务器。  如果 STARS 保持一致、并且尾风良好、我可以启动 XGCONF GUI、因此我"将"HTTP 服务器模块添加到我的配置"。  添加一个实例"http0"。 然后尝试构建。

    我认为您应该避免使用 HttpGet 示例。 正如您发现的、这仅适用于 HTTP 客户端。 此示例对您没有帮助。

    最好坚持使用 tcpEcho 示例、然后从那里执行。

    [引用 user="Christopher Weber"]总之 ,我无法成功地增强现有示例,也无法将 NDK 链接到"从头开始制作"项目中

    好的、我想我们可以尝试一些基本的方法来解决这个问题。  请确保您已完全关闭 XGCONF 工具(它有几个窗口在 CCS 中打开)。  此外、请确保仅在您喜爱的文本编辑器中打开*。cfg 文件。

    在*。cfg 文件的代码中、将 HTTP 服务器添加到 NDK 应用非常简单。  要打开网页、需要做更多的工作、但我可以在一分钟内向您展示这方面的一个示例。

    作为基本的第一步、您能否尝试将 HTTP 服务器添加到您拥有的(有效) tcpEcho 示例中?

    这可以通过编辑 tcpEcho.cfg 文件并添加以下代码来完成。  您只需从 CCS 项目视图中拖放 tcpEcho.cfg 文件并将其放入您喜爱的编辑器即可。

    打开后、只需添加以下内容。  您可以将其添加到文件的末尾:

    VAR HTTP = xdc.useModule('ti.ndk.config.Http');
    var http0Params = new HTTP.Params();
    var http0 = http.create (http0Params);

    您能否尝试一下、然后构建 tcpEcho 应用程序以确保它仍在构建?

    Steve

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

    下面是 一个链接、其中举例说明了如何在 TIRTOS 应用程序中构建 HTTP 服务器

    如果您能够添加 HTTP 配置代码并重新构建 tcpEcho 应用、如我在上一篇文章中所述、那么我认为您应该能够执行此路由。

    请注意、这些步骤有一个 zip 文件、其中包含对您有用的"最终解决方案"项目。  最有用的部分是它具有*。cfg 文件、该文件将告诉您 HTTP 服务器和相关设置所需的配置代码。 (由于指令幻灯片中的指令都是基于 XGCONF 的、因此您需要忽略这些步骤并仅引用*。cfg 文件的代码)。

    还有有关 NDK 配置设置的文档(即可以在*。cfg 文件中设置的 NDK 的 JavaScript 配置代码)、因此我想向您指出这一点。

    它位于 docs 文件夹下的 NDK 中、例如在我的机器上:

    C:\ti_tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\docs\CDOC\index.html

    此文件将为您提供有关可为 NDK 配置的每个模块的信息。

    例如,您可以看到有关配置 HTTP 服务器的信息:

    Steve

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

    Steve、

    此时、版本1对我来说不是问题。 理想情况下、我希望将我自己的 HTTP 服务器移植到 MCU 中、因为它在状态和 REST 架构中不会进行一些自定义操作。  但我在这一点上尝试爬行、然后再尝试行走。

    现在、在第一个回复中、我打开了 TcpEcho 项目、关闭了所有其他项目、以文本形式打开了 cfg 文件、运行到底部、并添加了这三行代码。

    结果与尝试使用 GUI 将 HTTP 服务器添加到 HttpGet 项目时相同。 链接器缺少函数。

    Makefile:150:目标'tcpEcho_EK_TM4C1294XL_GNU_TivaTM4C1294NCPDT.out'的配方失败
    C:\ti_tirtos_tivac_2_16_01_14\products\NDK_2_00_09\packages\ti\ndk\nettools\tifest_ipv2_undefined
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    :
    
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:undefined f_eftefs /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:unegf_en_f_inesf_en_en_en_inf:unegREF_en_inesf_en_inesf_en_inesf_en_inf:```````inf:undefined file242_en_inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf:undefined inf inf inf inf inf inf inf inf inf inf inf inf inf ` 

    这些似乎是 NDK 文档所说的函数、但它们不起作用。

    有关手动编辑配置文件的几个问题:

    1. 有人如何知道这些是什么?  我猜测有数百个软件包,如 ti.ndk.config.HTTP,它们都有各种设置,我可以在与每个软件包关联的 cfg 文件中看到 (System.abortFxn for "System" semaphore.supportsEvents for "semaphores"、BIOS.runtimeCreatesEnabled 或 BIOS.libType...)。  如果是任意位置、则定义这些变量、以便有人知道所有可能的实例变量是什么。 GUI 是唯一知道的吗?
    2. 如果打开并保存 GUI、会有哪些因素阻止配置文件被过度写入?  如果我有一个设置 (System.WhateverValue=12),并且 GUI 不知道它是什么 (因为 GUI 版本可能不像软件包那样是最新的...?) 我如何知道手动放入 CFG 文件中的任何内容都将有效?

    但是、我不会考虑这些问题、我会举出您向我指出的例子、看看我是否可以使它正常工作。

    -CSW

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

    Steve、

    在回答示例项目 https://fs.zip 时、我按照 PPT 中的步骤操作、甚至没有使用项目的 zip 文件。  它工作正常。  这些步骤与我在其他项目上执行的步骤相同。  这让我更加困惑。

    为什么??

    (笑声) 我能否使用空项目按照示例进行操作、并执行第21页之前的所有步骤、这样就可以正常运行。

    但是

    (笑声) 当我创建 TcpEcho 并按照完全相同的步骤添加 HTTP 服务器时、我会在链接器上获得这些命令:

    C:\ti_tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\packages/ti\ndk\nettools\lib\NetTool_IPv4.am4fg (loadclie.om4fg):在函数`httpClientProcess '中:
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    
    
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:undefined:ti 对`END_REFERSIF_END2_EN64_REF_EN64_REF_REF_ENDESSIZE
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c
    的引用:/db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:undefined ``````END202_END_END202_REF_END_REF_END_EN64_END_END1_END_END_END_REF_END_REF_ENDESS_END_END_END20_END_END_END_END_END132_END_REF_END_END_END_END_REF_END_END_END_END_END_END_REF_END_END_END_END_ENDESS_END 

    这是我遇到火车残骸的地方。  当我使用 XGCONF 来添加软件包时、两个项目作为裸机壳应该是相同的、但有一个不链接。

    有什么想法吗?

    (我看到您回答了我关于 JS 软件包文档的其他问题-谢谢)

    -CSW

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

    您能否为这些项目中的每个项目创建一个 zip 文件(请为每个项目分别创建 zips)并附加?  请确保它们已构建(或在更新的 tcpEcho 情况下部分构建)。

    我想比较一些设置以及从编译中生成的文件、看看是否有什么突出的东西。

    Steve

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

    [quote user="Christopher Weber">如果打开并保存 GUI、会有什么阻止配置文件被过度写入的因素?  (笑声) 我如何知道手动放入 CFG 文件中的任何内容都将有效?

    没有任何东西可以阻止这种情况。  但是、如果您已保存在文本编辑器中所做的所有更改、然后在 GUI 中打开配置、则所有这些更改都将出现在 GUI 视图中。

    如果您尝试同时在 GUI 和文本编辑器中进行编辑、我只希望您遇到问题。

    [引用 user="Christopher Weber"]如果我有一个设置 (System.WhateverValue = 12),并且 GUI 不知道它是什么 (因为 GUI 版本可能不像软件包那样是最新的...?)[/quot]

    如果您设置 System.WhateverValue = 12、并且'System'模块没有字段'WhateverValue'、则在打开 XGCONF 视图时构建项目时会出现错误(GUI 在打开时执行对*。cfg 文件的验证)。

    运行的验证与构建应用程序时相同。 它将使用您的项目设置来查找与构建应用程序时相同的"系统"模块。  GUI 不会找到与您的项目设置使用的"系统"模块不同的模块。

    现在、如果您知道系统模块将有一个名为"WhateverValue"的新元素、并将脚本更新为12、则需要将应用程序的依赖项(在本例中为 XDC 工具)更新为具有"WhateverValue"的较新版本、然后重新编译。

    Steve

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

    Steve、

    "httpserver"是根据您在 wiki 上指向的示例构建的。 我甚至没有使用 Resource Explorer 导入任何内容。 我刚刚使用菜单上的"Project | New"创建了一个新的空项目。  无论如何、它们基本上是相同的。

    "tcpEcho_EK_TM4C1294XL_GNU_TivaTM4C1294NCPDT"是资源浏览器示例项目、然后我使用 GUI 添加了 HTTP 服务器。  而不进行链接。

    让我知道你能找到什么、包括如果我在某个地方拧紧一个台阶。

    (在第三个项目上、[真的是第七个项目]、我提供了自己的 EFS_。。 文件函数、并通过链接器...  但为什么呢??  至于这两个项目、为什么它们在一个项目上得到解决、而不是在另一个项目上得到解决?)

    谢谢。

    -CSW

    e2e.ti.com/.../HttpServer.zip

    e2e.ti.com/.../tcpEcho_5F00_EK_5F00_TM4C1294XL_5F00_GNU_5F00_TivaTM4C1294NCPDT.zip

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

    [引用用户="Steven Connell"]

    如果您尝试同时在 GUI 和文本编辑器中进行编辑、我只希望您遇到问题。

    [/报价]

    是的、我已经推测有人 必须相当愚蠢地同时操纵这些文件。  不会尝试这种方法。

    [引用用户="Steven Connell"]

    如果您设置 System.WhateverValue = 12、并且'System'模块没有字段'WhateverValue'、则在打开 XGCONF 视图时构建项目时会出现错误(GUI 在打开时执行对*。cfg 文件的验证)。

    运行的验证与构建应用程序时相同。 它将使用您的项目设置来查找与构建应用程序时相同的"系统"模块。  GUI 不会找到与您的项目设置使用的"系统"模块不同的模块。

    现在、如果您知道系统模块将有一个名为"WhateverValue"的新元素、并将脚本更新为12、则需要将应用程序的依赖项(在本例中为 XDC 工具)更新为具有"WhateverValue"的较新版本、然后重新编译。

    [/报价]

    好的、这开始清除问题。  它强制 GUI 工具与生成 C 代码的 JS 引擎保持一致...  显然,在那里有一个庞大的生态系统,我只是刚开始明白。  

    我知道 JS 引擎会编译配置文件并生成 C 代码、或者可能只是链接器命令、以便根据您选择的软件包添加和解析所需的所有内容。  对我来说、它是如何做到这一点的(原始 C 代码来自哪里、或者库知道什么)。  在这个阶段、让我的新手问题得到解答并不重要。

    只需验证一下、这是我的 C:\TI 文件夹中的 XDC 软件包、对吧?  因为 XDC 不是进入项目的软件包、如 BIOS、NDK、TviaWare...  它站在外面并创建编译的项目 (如 Mickey Mouse 和他的手棒一起放在 sorerers Apprentice LOL!)  

    谢谢。

    -CSW

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

    有几件事很突出。

    最值得注意的是、工作项目使用的是 TI 编译器。  不起作用的是使用 GNU 编译器:

    您可以尝试导入 TI 工具链的 tcpEcho 示例并重试此实验:

    接下来、您应从配置中删除以下行。 这将引入 HTTP 客户端、您不需要:

    var ti_net_http_HTTP = xdc.useModule('ti.net.http.Http');//第37行 tcpEcho.cfg

    Steve

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

    Steve、
    我从一个未受污染的工作空间开始。
    从 GCC 编译器导入 tcpEcho 工程时、编译该工程、添加 HTTP 服务器、然后重新编译该工程时、我会得到缺少的函数。
    当我从 TI 编译器导入 tcpEcho 工程、编译该工程、添加 HTTP 服务器、然后重新编译该工程时、不会缺少任何函数。

    相同的问题:

    C:\ti_tirtos_tivac_2_16_01_14\products\NDK_2_25_00_09\packages/ti\ndk\nettools\lib\NetTool_IPv4.am4fg (loadclie.om4fg):在函数`httpClientProcess '中:
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpclie.c
    
    
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:undefined:ti 对`END_REFERSIF_END2_EN64_REF_EN64_REF_REF_ENDESSIZE
    /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c
    的引用:/db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c /db/vtree/library/trees/zumaprod/zumaprod-j14/exports/tirtos_tivac_2_16_01_14/products/ndk_2_25_00_09/packages/ti/ndk/nettools/http/httpsend.c:undefined ``````END202_END_END202_REF_END_REF_END_EN64_END_END1_END_END_END_REF_END_REF_ENDESS_END_END_END20_END_END_END_END_END132_END_REF_END_END_END_END_REF_END_END_END_END_END_END_REF_END_END_END_END_ENDESS_END 

    这意味着这些"efs_..." TI 编译中存在函数、但 GCC 编译中不存在函数。


    (在这两种情况下、由于这是一个未经处理的全新示例、因此没有要删除的 HTTP 客户端)

    现在我们知道 GNU 版本存在缺陷。

    案例已关闭 :-) ,但需要重建以修复此问题的库除外。

    谢谢


    -CSW

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

    Steve、

    是否有与用于 Sitara 的 TI_RTOS 文档相同的质量?

    无论我做什么、我都无法编译一个基于 NDK 的简单程序。  我在其他任何地方都没有得到答案。  你犯了帮助我的错误,所以我回来要求更多 :-)

    -CSW

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

    Steve、

    请允许我澄清...  从 Todd 关于如何添加 HTTP 服务器的文档中可以看到、这似乎 不适用于 Sitara。  文档的第一步是突出显示"TI-RTOS "、但它不存在...  我已经安装了所有组件、还有厨房水槽。  因此、我不知道我缺少什么。

    两张图像、彼此相邻...  TM4C1294器件 ---  进行了比较。

      .    

    非常感谢您的任何帮助-请。

    -CSW

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

    [引用用户="Christopher Weber"]

    这意味着这些"efs_..." TI 编译中存在函数、但 GCC 编译中不存在函数。

    [...]


    现在我们知道 GNU 版本存在缺陷。

    [/报价]

    我提交了以下文件来跟踪此情况:

    NDK-150 - NDK 库的链接顺序不正确会导致 GCC 的符号未定义

    Steve

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

    Christopher、

    将来、请打开新主题的新主题。 由于此主题已标记为"已回答"、您的最后一个主题可能会被完全错过、因为它不会出现在我们的"未回答的问题"待办事项列表中。  它还使其他人更容易搜索/查找。

    遗憾的是、Todd 的文档专门针对 TI-RTOS 产品进行了定制、TI-RTOS 产品是专为 MCU 平台设计的 SDK。

    Sitara 团队交付了自己的 SDK、我认为 NDK 使用不同的配置方式。


    我将会说"查看 Sitara SDK 中提供的 NDK 示例"。  但是、在我安装的版本(有点旧)中、我看不到任何内容。

    因此、我建议您毕竟提交一个新帖子。 您应该会问在 SDK 中哪里可以找到 NDK 示例。  您还可以参考 此论坛主题、 该主题指出他们将在2015年实现这一目标。

    Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Steve、
    感谢您的回复。 我将在该论坛上打开一个新主题。 但我现在无法运行、因为 CCS 7.1甚至不起作用(至少对我而言)。 请参阅:
    e2e.ti.com/.../2241977

    我认为 Sitara 团队以自己的方式完成了任务。 我只是希望您能快速了解。 因为与有用的东西相比、搜索只会发现更多的死端和旧材料。
    -CSW