本文介绍ARM的半主机模式,并介绍在MCU进行调试时其他的调试方法和手段。
1.ARM半主机模式(Semihosting)
ARM Semihosting是ARM平台的一个独特功能,它允许使用主机上的输入和输出函数,通过硬件调试器转发到微控制器,通过挂接到I/O函数,如printf()和scanf(),甚至fopen()。
Semihosting由一组定义的软件指令(例如 SVC)实现,这些指令从程序控制中生成异常。应用程序调用相应的Semihosting调用,然后调试器通过与主机上的调试应用程序通信来处理异常。
ARMv7之前的ARM处理器使用SVC指令(以前称为SWI指令)进行Semihosting调用。但是,对于ARMv6-M或ARMv7-M,在Cortex-M1或Cortex-M3处理器中,Semihosting是使用BKPT指令实现的。
如图,目标板,如MCU内部调用printf(),Host和Target通过仿真器连接,这样printf()就可以通过仿真器将字符输出到开发环境相应的调试窗口上,方便我们调试。
2.其他调试方法
另外,除了semihosting调试方式外,MCU还有其他的调试方法。
1)Semihosting:内置于每个ARM芯片,需要添加额外的库并在调试模式下运行。
2)控制台日志:转发到本机UART端口,通过USB端口转发到虚拟COM端口。
3)串行线视图(SWV):通过专用单线输出(SWO)引脚快速输出,但它仅在Cortex-M3+上可用,这是单向通信。
4)实时传输(RTT):速度极快,但只能与SEGGER调试器配合使用,可以进行实时双向通信。