工具/软件: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"\});