工具/软件: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