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.
工具/软件:Code Composer Studio
我们正在使用 GNU Arm 嵌入式工具链(developer.arm.com/.../gnu-rm) 和自定义 makefile 为 TDA2P 构建裸机软件。
要调试代码、我们需要使用 CCS 8.0.0.16和 XDS560v2调试器。 连接到目标并上载 ELF 工作正常、调试器停止在主函数的入口点。
我们使用的是无工程调试会话、因此我必须手动找到包含主控制的文件。
问题是设置断点仅适用于包含 main 函数的文件。 我可以使用"Step in"从其他源文件中逐步进入函数、而不会出现任何问题。
找到文件并单步执行代码工作正常、但设置断点不能按预期工作。 每个断点都是灰显的、即设置为非活动。 如果我尝试激活断点、我将收到以下消息:
"任何已加载符号中的代码都不与"filename"第 XXX 行关联。"
这是我的代码:
第186行:McSPIChannelDisable() 我在这里设置一个断点 第187行: u32_base_addr 、第188行: u32_通道);
在"Disassembly"窗口中、我看到以下内容:
186. McSPIChannelDisable ( <-在第 9e004f80行:68B9设置了非活动断点 LDR R1、[r7、#8] 9e004f82:69B8 LDR R0、[r7、#0x18] 9e004f84:F000FD26 BL 0x9e0059d4
当我尝试在地址9e004f80的反汇编视图中设置断点(折行函数调用)时、我可以在完全相同的源代码行(186)处看到活动断点、我之前曾尝试在该行中设置断点。 但这种方法不是一种选择、因为它非常耗时。
这些是我们的编译器和链接器调用(为了便于阅读、删除了 include 和目标文件名)。
arm-none-eabi-gcc.exe -mthumb -std=gnu99 -fno-short-enums -G3 -MD -MP -DSOC_TDA2PX -D_TI_ARM_V7M4_-mcpu=cortex-M4 -March =armv7e-m -c -o spi.o spi.c arm-none-eabi-gcc.exe -specs=rdimmon.iprob-m-tex-m4=armv7e-mcums -imums -mf-nods -mcums -tex-mv7e-mcums -mcums -mv-mcums -rendip-m-r libs/ti.csl.aem4 libs/csl_uart_console.aem4 -lrdimon -LC -lm -o elf/out.elf
您好 Ki、
我创建了一个包含两个 C 语言和一个汇编程序文件的小型示例项目。 我还包括了 ELF 输出和所有目标文件。 要构建它、只需运行 build.bat 文件即可。 在 CCS 中将代码作为 makefile 工程导入后、我使用包含的 tda2p.ccxml 文件通过无工程方法连接到目标。
这就是我所做的:
我使用 Windows 10 Pro 计算机来构建软件。 这是 CCS 版本信息
Code Composer Studio
版本:8.0.0.00016
操作系统:Windows 10、v.10.0.10.0/Win32
针对此问题提交了错误。 跟踪 ID:CCSIDE-3359
到目前为止、已验证了一种权变措施。 创建包含源文件的虚拟工程。
然后在 调试启动配置中引用项目:
请注意、在指定源查找路径时、请确保在"器件"字段中为多核目标选择了正确的 CPU。
这是一种笨拙的解决方法、但却能做到这一点。 如果我找到更好的东西、我会告诉您。
谢谢
Ki
[引用 USER="Ki-Soo Lee">这是一种笨拙的变通办法、但却做到了这一点。[/引用]使用 CCS 8.0.0.00016时、有一个使用 gcc-arm-no-eabi-7-2017-Q4编译器的 Cortex-A8项目。 CMake 生成的 makefile 文件用于编译、 并创建了一个"makefile 工程及现有代码"Eclipse 工程、以允许 CCS 浏览、编辑和调试工程。
使用 main 获取 C 源文件并尝试使用断点的不同方法:
1)在调试配置设置为自动运行到 main 的情况下、启动调试会话时会在 main 成功停止。
2) 2)如果双击某个源代码行、则会获得 Eclipse 断点(小蓝色圆圈)、并且调试器不会在断点处停止。 修改源查找路径以添加包含源文件的特定目录不会更改行为。
3) 3)如果选择源代码行并使用"Run to Line"、程序将在所选源代码行停止。
4) 4)如果右键单击某个源代码行并选择"Breakpoint (Code Composer Studio)-> Breakpoint"、则获取 Code Composer Studio 断点(带有一个勾号的大蓝色圆圈)、程序在断点处停止。
因此、创建一个包含源文件的虚拟项目似乎并不是一个完全可靠的解决方法。 测试2和4之间的行为差异是否提供了问题原因的线索?
[引用用户="Ki-Soo Lee 的说法]问题是使用了标准 Eclipse 项目而不是 CCS 项目。谢谢、我不知道在使用标准 Eclipse 项目时启用 Code Composer 断点支持的选项。
确认解决了我的问题。