debugging 通过Cortex-M3 CPU上的printf输出调试,在BKPT指令处停止+混淆JTAG和sw端口

of1yzvn4  于 2023-08-06  发布在  其他
关注(0)|答案(4)|浏览(118)

我有一个Keil ULINK 2 USB仿真器盒连接到我的电路板上的JTAG连接器,它与板载Cortex-M3 CPU(TI/Stellaris/LuminaryMicro LM 3S系列)配合使用时工作正常。在这些CPU上,JTAG和SWJ-DP端口似乎共享相同的引脚(因此也共享主板上的连接器)。一个似乎没有ITM(printf)功能,另一个有。
以前的固件人员一直使用stdio到UART(串行端口),但我需要释放串行端口,以便调试消息不会干扰发送到串行端口或从串行端口接收的其他数据,因此我需要跟踪消息到其他地方。可悲的是,我只有一个串行端口在这个板上。我以为这个CPU中的ITM(跟踪)特性意味着我可以直接向我的调试器/IDE(Keil uVision)发送调试printf消息。TI/Stellaris CPU文档将此功能称为“串行线JTAG调试端口(SWJ-DP)”,据我所知,Keil uVision IDE中实现的一项功能就是支持该功能。
在我的代码中添加printf消息会导致我的代码在我开始调试时锁定。锁定似乎在链接到我的应用程序的RTL库中,在函数_sys_open中,在BKPT指令处:

_sys_open:
  0x00009D7A B50E      PUSH     {r1-r3,lr}
  0x00009D7C E9CD0100  STRD     r0,r1,[sp,#0]
  0x00009D80 F7FFFC0F  BL.W     strlen (0x000095A2)
  0x00009D84 9002      STR      r0,[sp,#0x08]
  0x00009D86 4669      MOV      r1,sp
  0x00009D88 2001      MOVS     r0,#0x01
>>0x00009D8A BEAB      BKPT     0xAB
  0x00009D8C BD0E      POP      {r1-r3,pc}

字符串
上面的代码似乎是__rt_lib_init_stdio_1调用的代码的一部分。
这是怎么回事啊?我不知道BKPT是做什么的。我假设它引发了一个软件断点,然后应该由调试器处理?Keil/ARM ULINK 2软件和硬件是否应该已经针对此进行了配置?有没有什么技巧可以让debug printf与Keil JTAG/sw端口一起工作?
我不确定sw和JTAG端口之间的区别是什么。sw的确切含义是什么,我认为它指的是电路板上JTAG物理连接器的两种可能模式之一,其中JTAG是一种经典但更受限制的模式,不支持走线,而sw模式添加了走线支持,但不向JTAG连接器布局添加任何引脚?但这是嵌入式系统,在那里,神秘是常态。我是Cortex-M3开发的新手,自ARM 7 TDMI时代以来,很多东西对我来说都是新的。但Keil uVision会打印出以下信息:“ITM仅适用于SW端口,不适用于JTAG”。SW是否是您必须在主板上设计的不同物理端口?(我使用的是定制设计的应用板,而不是开发启动板。)
[我在谷歌上搜索了一下,发现_sys_open和一些编译指示__use_no_semihosting_swi以及其他一些东西都与这个谜题密切相关,ROM中的BRKPT指令可能是SWI(“软件中断”)ARM指令的某种ARM变体。]

krugob8w

krugob8w1#

这是我的一个失败,因为我不明白stdio没有实现,而是你必须提供自己的实现,通常在一个名为“retarget.c”的文件中完成。文件名是纯粹的约定,但在Keil的uVision/RTLIB文档中有很好的文档说明(事实证明)

ogq8wdun

ogq8wdun2#

我已经用IAR EWW ARM工具链做到了这一点,但术语半托管使我相信Keil的方法是相似的。在指定要链接的标准库以使用半宿主时,应该有一个选项。这将在不同的库中编译/链接,该库通过JTAG端口将printf / putc重定向到调试器。
因此,请查看Uvision IDE或make脚本中的项目选项。在IAR链接器命令行中,这是“--semihosting”,但对于Keil工具可能不同。
BKPT是工具插入到源代码中以触发调试器的指令。这就是当调试器不支持硬件断点(或者您已经使用了完整的断点)时,IDE如何使您能够向代码中添加断点。

u2nhd7ah

u2nhd7ah3#

SW是一个双线接口,可访问器械上的调试端口。
Arm有一个.pdf关于它在这里:
http://www.arm.com/files/pdf/Low_Pin-Count_Debug_Interfaces_for_Multi-device_Systems.pdf

s5a0g9ez

s5a0g9ez4#

要在Keil uVision中处理此问题,只需转到项目选项。在“目标”选项卡/“代码生成”中,选中“使用MicroLIB”复选框。

相关问题