鸿运国际娱乐hg: [学习笔记] 浅谈MDK下AC781x调试之ITM跟踪

云顶之星 马尼拉网上娱乐场
146|5
楼主
本帖最后由 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调用时间。
  1. #include "system_ac78xx.h"
  2. #include "ac78xx_debugout.h"
  3. #include <stdio.h>
  4. #include "ac78xx_gpio.h"

  5. int main(void)
  6. {
  7.     InitDebug();
  8.     InitDelay();
  9.    
  10.     GPIO_SetDir(GPIO_PB9, 1);       /* PB9 为输出 (LED2位置)*/
  11.    
  12.     while (1) {
  13.         GPIOB_OUT(9) = 1;                      /* PB9 输出高 */
  14.         printf("Hello, this is a ITM sample demo.\r\n");
  15.         GPIOB_OUT(9) = 0;                      /* PB9 输出低 */
  16.    
  17.         mdelay(500);
  18.     }
  19.    
  20.     return 0;
  21. }
复制代码
4. debug设置项

不懂ITM stimulus Ports 各个参数含义,懂的大神可以给我解答一下

5. 仿真,打开串口下的printf view 串口,查看log

在printf view串口下,将看见我们的调试信息。

这是每500ms打印一次“Hello, this is a ITM sample demo.\r\n”,我们来测量一下这个函数的调用时间

我们可以看见调用printf输出“Hello, this is a ITM sample demo.\r\n”的时间是84us,可以说是很快的了。
再次提醒一下,要接SWO引脚,要使用SWD方式debug哦

温馨提示:此函数跟输出字符长度以及格式化数据有关,请勿在实时性要求很高的中断函数内调用。

最后,代码虽然很简单,但也把源码打包上传,提供参考。



AC781x_ITM_Debug.rar

412.3 KB, 下载次数: 1

沙发
| 2020-9-26 18:44 | 只看该作者
谢谢分享,鸿运国际娱乐hg:,【AC781x调试之ITM跟踪】
板凳
| 2020-9-27 10:44 | 只看该作者
不明觉厉,顶
地板
| 2020-9-27 11:38 | 只看该作者
电机调试时可以用这种吗?
5
 楼主 | 2020-9-27 11:57 | 只看该作者
nbiot 发表于 2020-9-27 11:38
电机调试时可以用这种吗?

用起来,遇到问题一起学习,一起进步
6
| 2020-10-10 10:13 | 只看该作者
使用第一种方式,想看看软件跑哪里去了,就必须设置断点,使软件暂停下来。在某些场合下这种调试方法就是很好用,比如调试UDS,在接收过程中打断点,就很有可能因为没有发送流控帧而导致发送端终止发送,导致整个数据流调试失败。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

云顶之星 马尼拉网上娱乐场 永利游戏开户直营 返回顶部 返回列表
彩88正规 彩17app下载直营网 亚洲国际MG电子彩票官网 4567彩票官网 千亿AG国际馆走势图
必赢亚洲76网址 银泰大小骰宝彩票 申博现金网手机APP下载 mg电子游戏手机版官网 ag平台开户登入
mg电子游艺技巧 澳门真人网址 pc蛋蛋 申博直营网客户端下载官网 西宁秀色娱乐城电子游戏
mg西班牙21点登入 申博直属官网注册彩金登入官网 金沙百家乐直营登入 澳门金沙集团网址 辉煌国际娱乐场官网