Stm32 ARM v6编译器启动代码中的断点指令

Stm32 ARM v6编译器启动代码中的断点指令,stm32,keil,armclang,Stm32,Keil,Armclang,我正在Keil MDK 5.28上为STM32开发一个新项目,使用ARM编译器V6(“新的”armclang编译器)。这是我第一次使用armclang 我的重置处理程序正在调用\u main符号。正如所料,这将执行Keil C库的一些启动代码,然后调用我的main函数(稍后,我将删除对启动代码的调用,但现在我想了解这个问题) 问题如下:其中一个C库函数(\u sys\u open)中有一条BKPT指令。我没有设置这个断点,它也没有出现在断点列表中。我无法移除它(显然我试图重建一切)。因此,如果不

我正在Keil MDK 5.28上为STM32开发一个新项目,使用ARM编译器V6(“新的”armclang编译器)。这是我第一次使用armclang

我的重置处理程序正在调用
\u main
符号。正如所料,这将执行Keil C库的一些启动代码,然后调用我的
main
函数(稍后,我将删除对启动代码的调用,但现在我想了解这个问题)

问题如下:其中一个C库函数(
\u sys\u open
)中有一条BKPT指令。我没有设置这个断点,它也没有出现在断点列表中。我无法移除它(显然我试图重建一切)。因此,如果不在此位置中断,我无法启动调试会话

我还尝试取消选中“RuntoMain”选项

您知道此BKPT指令来自何处以及如何删除它吗?

评论摘要:
断点指令
BKPT
是半宿主功能的一部分,它应该与调试器协作。启用Microlib将禁用半托管;请参阅和。

如果半主机处于启用状态,请尝试关闭半主机。目前我正在使用armclang(从armv5编译器移植)。断点(
BKPT
)可能是某个错误处理程序的一部分。找出相应的C源代码行,看看哪里出了问题。调用
\u sys\u open
无论如何都是可疑的…不确定这是否适用于µVision/Clang,但是,如果elf文件包含调试信息,使用GNU工具链,您可以执行
addr2line-e YourProgram.elf 0x8000A68
查找
BKPT
的源位置。根据映射文件,指令在此函数中。请参见屏幕截图。是的,但不在该功能的何处。可能有类似于
if(某些错误条件)\uuuasm\uuuuuuuvolatile(“BKPT”)在那里。你需要找到那种情况。。。然而,由于BKPT
似乎是无条件的,它实际上可能与Rik所说的半托管相关。