本帖最后由 GrootBrain 于 2020-9-27 11:54 编辑
M3内核的MCU一般会有以下3种调试方式:
1. 使用调试工具(ATC Link/ JLink等)在debug模式下调试;
2. 使用串口调试,打印一些log、数据等;
3. debug模式下ITM跟踪调试。
使用第一种方式,想看看软件跑哪里去了,就必须设置断点,使软件暂停下来。在某些场合下这种调试方法就是很好用,比如调试UDS,在接收过程中打断点,就很有可能因为没有发送流控帧而导致发送端终止发送,导致整个数据流调试失败。
第二种方式,就是必须使用一个串口(比如官方里程中使用的UART2), 这里推荐使用DMA+fifo的方式实现日志打印,好处是不用阻塞程序运行,牛扳 。
第三种方式是使用内核ITM跟踪,此方式的缺点是必须要在调试方式下,必须使用SWD方式,且占用一个IO口,SWO口。但好处也是显而易见的,不需要占用串口,速度快实时性高,直接在调试窗口显示。
------------------------------------------------------------我是分隔符-----------------------------------------------------------------------------
下面开始讲解AC781x的ITM使用方法
1. 使用官网提供的ac78xx_debugout.c,文件包含#include "ac78xx_debugout.h"。
2. 启用ITM调试宏ITM_DEBUG_OUT
3. 使用printf函数,记得包含<stdio.h>文件哦。这里测试每500ms输出一次“Hello, this is a ITM sample demo.\r\n”,并在调用printf前拉高PB9,调用后拉低PB9,测试整个printf调用时间。
|