打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
浅谈工程师的调试法宝(三)---SWO引脚的巧妙应用



摘要


在Cortex-M3\M4系列MCU中,内核的调试组件都有一个仪器化跟踪单元(ITM)。ITM的一个主要的用途,就是支持调试信息的输出(例如,printf格式输出)。ITM包含了32个刺激端口,允许不同的软件把数据输出到不同的端口,从而让调试主机可以把它们的信息分离开。每个端口都可以独立的使能/除能,还可以允许或禁止用户进程对它执行写操作。那么这些与MCU的SWO引脚有什么关系呢?刚才我们有说ITM包含了32个端口,其中SWO引脚,就是ITM模块的端口0,我们可以直接用它来输出一些调试信息。那么现在就看看如何使用它吧。

这次我们测试是基于飞思卡尔的FRDM-K64开发板,如图 1所示。关于飞思卡尔系列更多的开发板资料请访问http://www.zlgmcu.com/Freescale/。


图 1 K64开发板


把MCU的SWO引脚同J-link等调试工具连接在一起,因为K64开发板已经直接引出SWD接口了,所以我们就直接连接了J-Link。如图 2所示,第6脚就是SWO引脚。

图 2 SWD接口


当MCU连接好J-link之后,我们在工程中的主函数起始处添加stdio.h文件,如下所示。


#include


接下来为了能直接调用printf函数格式化输出,又需要用到我们之前提到的重定向技术了,只是这次不是重定向到串口,而是ITM模块的0通道,即SWO引脚。如程序清单 1所示。


程序清单 1 重定向代码

int fputc(int ch, FILE *f) {

ITM_SendChar(ch);

return(ch);

}


其中ITM_SengChar函数是core_cm4.h内核文件里定义的内联函数,我们可以直接调用。

完成重定向之后,我们写了个定时打印HelloWorld的程序。打开Keil工程的【Options for Target】->【debug】->【settings】->【Trace】,对Trace选项卡进行如图 3所示的配置。


图 3 Trace选项卡配置


点击确定之后,进入调试模式,打开【View】->【Serial Windows】->【Debug(printf) Viewer】,这时我们就可以看到MCU通过J-link向编译器输出的打印信息了,如图 4所示。打印速度还很快哦。


图 4 Debug Viewer窗口

到此我们算是学会了使用SWO引脚来调试输出了,是不是很酷哦。细心的网友可能会发现为什么Cortex-M0\M0+内核的MCU没有找到SWO引脚呢?这是因为它们采用的还是ARM-V6的老架构,内核的调试组件没有ITM模块。

又是一个遗憾,本来以为找到了最合适的调试方法,却对MCU的内核有限制。那么有没有一种调试方同时具有SWO的优点,并同时能在Cortex系列内核的MCU中使用呢?当然这些是难不住调试经验非常丰富的ZLG工程师的,敬请大家关注下一篇文档《浅谈工程师的调试法宝(4)之RTT的使用》。




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
printf系列教程05
STM32中重定向printf到SWO口
将printf重定向到ITM[图解]
STM32的ITM跟踪调试功能介绍及实现(一)KEIL篇
嵌入式开发输出调试和日志信息的几种方法
Keil中搭建自动化单元测试框架Unity
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服