2. Semihosting简介
Semihosting是一种调试技术,主要用于嵌入式系统开发。它允许嵌入式设备在运行时通过调试器与主机系统(通常是开发者的计算机)进行通信,从而实现一些复杂的输入输出操作。在STM32开发中,最常见的Semihosting应用是通过printf函数输出信息到PC的串口终端。其常规的调用路径如下图所示。
▲ 图2. Semihosting
当应用程序调用了printf函数,则编译器会默认启用的Semihosting功能,从而在初始化C库的时候,会执行与调试器进行交互操作的动作,应用程序是通过SVC或者BKPT这些指令与调试器进行交互,如果初始化过程中得不到调试器的响应,那么应用程序就不会往下执行。结合ARM的参考文档,既然是Semihosting引起的问题,那么ARM也提供了解决问题的方法,可以参考文档ARM: Application Builds Without Error, But Does Not Run。