STM32

STM32的ITM跟踪调试功能介绍及实现(二)IAR篇

2019-01-22  本文已影响0人  海东青电子

在上一篇文章中,介绍了STM32的ITM跟踪调试功能在KEIL中的应用,本文介绍IAR中如何使用ITM。

与在KEIL中类似,在main.c文件中,增加一行测试ITM的输出语句:

ITM_SendChar('A');

编译、链接,下载到目标板。在IAR中启动debug,进入debug状态,先调出ITM输出数据的观察窗口(只能在IAR的debug状态下操作,代码编辑状态下是不行的,下同):

图一

弹出 Terminal I/O 窗口,ITM的输出将在这个窗口中显示。

工具栏中,点击SWO图标,选 SWO Configuration... :

图二 图三

在上图中的两个0的位置打勾,使能ITM的port0端口。然后全速运行程序,但 Terminal I/O 窗口中并没有我们希望的字符‘A’出现,注意,此时IAR工具栏上 SWO 图标是这样的:

图四

说明SWO没有真正跑起来,这是因为还有一项最重要的配置步骤没有完成 -- 在IAR中“激活”TIM。暂停debug,然后点击菜单条中的 ST-Link :

图五

如下图、打勾:

图六

工具栏中的 SWO 由灰色变成绿色(表示有效!)了:

图七

此时继续debug,可以看到ITM的跟踪输出数据了(字符‘A’):

图八

补充说明:上面的实验是基于 IAR 8.20.1 的,网上很多资料把ITM不能输出的原因归于下图中未对SWO做正确配置:

图九

但经过测试,上图中 Via SWO 是可以不用打勾的,甚至都不必打勾Semihosted, 即如下图所示的配置也是没问题的(ITM跟半主机模式Semihosted是不同的概念,使用ITM不必配置半主机是合逻辑的):

图十

这样配置ITM照样可以正确输出。但是,要特别注意一点:在IAR中每次启动debug时,都必须检查一下上面图三中,两个0的地方是否是打勾的状态!这两个地方必须打勾!本人在测试时就遇到了某次启动debug后,上面两个地方之前打的勾不见了,自然导致在观察窗口中看不到输出。难道IAR没有记录ITM端口的配置状态?目前仍不知是何原因。

小结:

IAR中ITM的应用,需特别注意 ST-Link 菜单中对SWO的配置;并且,每次debug时,都需要先检查ITM的端口0是否打勾了(激活、并输出到观察窗口)。

本文结束,请见下一篇:ITM在ST-LINK V2客户端上的实现

上一篇下一篇

猜你喜欢

热点阅读