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.
您好!
我有一个 cmake 项目能够为 TMS570LC43xx 编译应用。
我能够生成二进制文件、使用 uni-flash 将其加载到目标中、但现在我想在目标中进行调试。
我很难让 CCS 获取我的.out 文件、将其加载到目标中、运行它、并在我的源代码语句中制动点。
可以这样做吗? 我是否可以使用任何 wiki 或指南?
此致
尊敬的 Martin:
我认为 CCS 无法从 cmake 生成的输出文件中查看源代码。
尊敬的 Martin:
我会将您的问题转交给 CCS/Compiler E2E 论坛以获取帮助
您好!
[引用 userid="549153" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1194587/tms570lc4357-debug-cmake-ti-build-with-ccs ]我很难让 CCS 获取我的.out 文件、将其加载到目标中、运行它、并在我的源代码语句中提供制动点。您能否提供有关您遇到的确切问题的更多详细信息?
还提供所使用的确切 CCS 版本。
谢谢
Ki
你(们)好
很抱歉、我不得不离开项目一段时间。 因此、我能够使用 toolchain.cmake 文件和能够编译.out 文件的 ninja 创建 CMakeList.txt。
使用"New Project">"Makefile Project"并创建新的目标连接、我现在还能够刷写微控制器并运行软件。
它不起作用、因为我使用的是 cmake 中的 Eclipse 生成器、然后使用"Import > Existing project"。 使用最后一个选项、调试不会将二进制文件加载到目标中、而只是尝试运行存储器中的任何内容。
现在、我检查存储器、它具有中断矢量以及所有应用二进制和调试符号:
现在、我在代码执行中被阻止。 在_c_init00 (void)函数上执行此行时遇到_undef 异常
请提供任何帮助。
您是否在 CCS 之外构建项目、而只是希望使用 CCS 加载程序并仅进行调试?
是的。
我的分析取得了进展。 我已经使用在 cmake 工程中编译的相同文件手动编译了 CCS 工程。 CCS 工程工作得非常完美、因此我得出结论:cmake 工具链中有一些配置不当的工程、或者无法将某些工程加载到目标中、因为我使用的是简单的 Eclipse 工程调试、而不是 CCS 工程调试。
我比较了编译器命令行、它们是等效的。 传递相同的参数、但并非始终采用相同的顺序。 例如:
CCS:
CMake:
链接器命令文件是相同的。
我比较了链接器命令行、它们是等效的(如上所述)。 传递相同的参数、但并非始终采用相同的顺序。 例如:
CCS:
CMake:
我们首先将一些文件编译到库中、这是 CCS 工程未执行的操作。 该库的封装方式如下:
其中 amar_wrapper.bat 为:
这样做是为了解决 e2e.ti.com/.../warning-10189-d-archive-symbol-directory-is-missing-from-archive 中提到的问题。
我比较了映射文件、我发现它们具有相同的段、相同数量的符号、相同的符号(除了其中一些符号被标记为我们为 cmake 工程1创建的库的一部分)、相同的存储器大小。
您认为使用库可能是问题吗? 还有其他想法吗?
谢谢。 总之、可以在 CCS 中成功编译和调试 CCS 工程、而不是基于 CMake 的 makefile 工程。
[引用 userid="549153" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1194587/tms570lc4357-debug-cmake-ti-build-with-ccs/4515503 #4515503"]使用"使用现有代码新建项目> makefile 项目"并创建新的目标连接我现在还能够刷写微控制器并运行软件。如果您在 CCS 之外构建、我对您在这里所做的工作有一点不清楚。 您不需要工程即可进行调试。 您可以启动 手动启动 、然后在没有项目的情况下手动加载程序。 当您执行此操作时、您仍然 会看到相同的问题吗?
非常感谢您的帮助、非常感谢。 但我仍有相同的问题。
相关信息
使用"New Project">"Makefile Project"并创建新的目标连接、我现在还能够刷写微控制器并运行软件。
cmake 生成能够编译的忍者 makefile 文件。
我可以使用命令行运行构建:
cmake --build
因此、我创建了一个类型为"使用现有代码生成项目"的新 Eclipse 项目、并将 eclipse 配置为运行 cmake --build 编译以编译程序:
然后、我转到调试配置、并使用目标的 ccxml 文件(我用于调试 CCS 项目的相同文件)配置新的调试配置、来自此 Eclipse 的源文件 make 项目和用于 ECC 兼容性的闪存选项很少。
我还执行了手动启动、这与使用导入的工程自动调试时的观察结果相同。
程序加载到目标中、它正在运行、当我暂停执行时、它在_udef 中断矢量中:
供参考我还尝试不在库中编译一组.c 文件、然后将其与二进制文件链接。
映射文件现在更加相等(一些只在.obj 命名中更改、但其他所有内容相同)
不同命名的示例
只有一个区别:
不确定是否重要。
尺寸相同
"全局符号:按名称字母顺序排序"部分没有区别(名称和地址相同)
相同数量的符号
但我无法将二进制文件运行到目标中、我得到_undef 异常。
我的结论是、在目标加载期间 CCS 工程会执行某些操作、但手动启动或我的方法不会执行这些操作。
您能否尝试最后一次测试:
1) 1)手动启动并连接
2) 2)手动加载/运行由标准 CCS 工程生成的可执行文件。 一切都能按预期工作吗?
3) 3)手动加载/运行通过 cmake 自定义 makefile 工程生成的可执行文件。 一切是否按预期工作、或者您看到了错误?
我进行了测试、使用 CCS 工程编译的.out 工作正常
但不包括使用 cmake 编译的代码:
n´t 是否相关、但我已经使用 cmake 工具链编译了一个包含.c 文件子集的库、然后在 CCS 工程中使用该库而不是添加.c 文件、并且它可以正常工作。
最好使用此 API 来创建工程、而不是使用 cmake toolchian 吗?
software-dl.ti.com/.../ccs_projects-command-line.html
您使用 cmake 而不使用 CCS/gmake 的主要原因是什么?
以避免工程的手动配置(容易出错)并简化编译选项的审阅。
我现在拥有的是手动创建的 CCS 工程的 PROB、我必须将其删除并在另一个文件夹中创建、然后再进行研究...
在这种情况下、我建议使用 CCS 工程并使用命令行界面在前面提到的链接中创建/编译这些工程。
如果您仍然希望调查 cmake 问题、我需要将其转发给编译器团队、因为这似乎不是 CCS 编译/调试问题。
大家好、我还有一个正常工作的解决方案(我必须重新执行 CCS 项目才能使其再次正常工作)。 我现在将继续使用此解决方案、但我想了解 为什么 Cmake 工具链不起作用。 如果您可以将问题转发给编译器团队、我将不胜感激、即使我不能花很多时间来回答。
我将提请他们注意这个主题。
谢谢
Ki
请将数据恢复到这样的状态:在比较两个构建中的链接器映射文件时,情况就是这样...
[引用 userid="549153" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1194587/tms570lc4357-debug-cmake-ti-build-with-ccs/4519226 #45192226"]全局符号:按名称按字母顺序排序"一节(名称和地址相同)没有区别然而,当运行使用 CMake 生成的代码时,此行为仍会发生...
[引用 userid="549153" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1194587/tms570lc4357-debug-cmake-ti-build-with-ccs/4519226 #45192226"]我无法将二进制文件运行到目标中,我得到_undef 异常。请安装 代码生成工具 XML 处理实用程序。 使用该软件包中的实用程序 objdiff 来比较每个构建中的两个可执行.out 文件。 它们是相同的吗? 如果它们不相同、则在文件中捕获 objdiff 的输出(确保其具有文件扩展名.txt)、并 将 其附加到下一个帖子。
谢谢、此致、
乔治