一天的突然消息,听说Jlink 可以仅仅使用自身就可以输出调试信息,不在使用多余的其他UART 外界接口,所以就花了3天时间折腾了下(网上搜索,使用很简单,但是自己去使用三天才正常输出,踩了不少坑,所以现在记录一下),

Jlink 输出调试信息可以通过两种方法

一,Jlink的 Target功能,该方法需要用到Jlink 的SWO引脚,如果外设芯片没有这个脚的话,说明这个方式是行不通的  ,

其实配置很简单

1.1如下配置Jlink的配置

1.2,添加printf的重定向,到SWO

#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000

int fputc(int ch, FILE *f) 
{
  if (DEMCR & TRCENA) {
    while (ITM_Port32(0) == 0);
    ITM_Port8(0) = ch;
  }
  return(ch);
}

1.3,在如MDK IDE的Debug printf 窗口就可以看到你的调试信息

二,使用Jlink的 RTT功能 ,

其实我主要是使用这个功能,这个功能是不需要另外接其他引脚的,如果使用SW连接方式,仅仅两根线就可以,

RTT 是Jlink的一种实时终端的方式连接输出调试信息,网上有很多说明之间按照做就可以,我仅仅是记录一下自己的步骤,和自己遇到的坑,记录一下自己的解决方案,

1,就是下载RTT软件包,

下载RTT文件: http://download.segger.com/J-Link/RTT/RTT_Implementation_140925.zip

2,按照V4.9e上的Jlink驱动,因为版本是不支持Jlink RTT的传输,

3,添加RTT文件到自己的工程

4,添加必要的头文件,

5,输出函数打印

这个时候RTT在程序中就添加成功了,,我们可以使用使用Jlink带的3各工具进行查看数据

如打开RTT Viewer 提升连接,点击OK  不出意外的化,你就可以看到调试信息了,

其实到这里  ,一般就完事了,但是  我的之前就是出意外了,最后一步就是不能输出信息,,网上搜索了很多放到就是不行,

我的现象是:

1,添加RTT文件这些感觉一切正常,

2,我是用RTT Client 连接,能连接上,但是不会输出调试信息

3, RTT Viewer  RTT Logger 等也是都可以连接

4,Jlink的连接窗口一直在提示是在读取

可是就是一直没有数据输出,可怜我的心了 ,,,

解决:

一开始以为是Jlink驱动不对,因为是我的电脑上安装了多个版本的Jlink版本,在MDK的 Jlink文件夹内还是会给你拷贝一份驱动在那保存,每次启动会直接用那份驱动,具体那份驱动是哪个版本,直接点击Jlink.exe或者从Keil的这个窗口可以看出

我再使用单独安装的Jlink 驱,可能会和这个版本不一样,每次点击RTT 的那三个创,一意孤行的认为不对,可能就是驱动的问题,结果,  换了最新,又后退版本的折腾好久,结果,很确定的说,,,,和这个没有关系,,

2,网上看到可能是需要修改RTT的源码,什么识别的字符不对,等等,研究了半天,感觉他们的修改就是非必要的, 在SEGGER_RTT_Conf,h就已经有一个宏是区分程序在RAM中的情况,

#define SEGGER_RTT_IN_RAM,   把他定义为1,即就是他们修改的方式了,

但是在我的工程中也是未能成功输出,

气的不行,为毛我的还不出来,网上真没有其他说法了,

狠下心去看看 这个RTT是个什么鬼,,

终极解决方案:RTT是什么鬼, 不用说我们都可以知道Jlink是做什么的, 就是下载程序,调试程序,也就是说Jlink可以任意读写片上的内存,,RTT是怎么出来了,其中的具体实现是不清楚的,这是封闭的,但是我们可以看出

1,在RTT打开后从Jlink的Control Panel可以看出,RTT是一直在读取数据的过程,

2,我们在代码中去看SEGGER_RTT.c  其实就是一个在往一个buffer中写数据就是   

这下明白了,,RTT其实就是一个Jlink读片子上的一个内存buffer中的读写,即,_SEGGER_RTT 中定义;这个buffer中的第一项是acID[16],它是做什么的,就是Jlink去读内存时,回去中这部分字符串,如果匹配上了,就是找到了这个buffer,就在这部分内存中读取数据,,会根据规定的数据机构就解析内存上的数据, 来实现RTT是读写,如果找不到那读写数据就办不到了,

而我的RTT连接正常,但是没有数据也就是找不到这片内存,

为什么找不到:我使用的片子不是市面上常用的  XXX片子,  这是一个私有定制的片子,内存偏移的这些存在很多不同的地方,

具体Jlnk 是怎样的搜索这片内存就没再去深究了,我们先来测试一下我们的研究成果过吧,

1,启动程序,

2,打开RTT Viewer,提示配置,  居然它找不到我就直接给它吧,不要让它再去找了,累坏它咋办,

点击OK,我去,终于出来了,3天时间,====不够聪明啊。。。。

有点小纠结: RTT Viewer 在每次调试启动后需要重启点击,不知道这有为毛,(直接快捷键F2,再重启连接即可)先用着吧,

总结: 很多工具我们可能是想用用就算了,不想深入研究其中东西,但是有时候还是事宜愿为,凡事需要弄懂其中道理才会真正的使用自如。。。。

Jlink 使用 RTT 输出调试信息总结相关推荐

  1. STM32 使用 ITM 输出调试信息

    本文开发环境: MCU型号:STM32F103ZE IDE环境: MDK 5.27 调试器:ST-LINK 本文内容: 使用 ITM 输出调试信息 文章目录 一.ITM 简介 二.ITM 输出功能的配 ...

  2. 嵌入式开发输出调试信息的几种方法(常规法及非常规法)

    这篇文章对于研发查找问题和测试都有很大帮助,在这里保存记录一下. 论语>有云:"工欲善其事,必先利其器".输出调试信息是软件开发中必不可少的调试利器,在出现bug时如果没有调 ...

  3. Qt 使用#define+qDebug()输出调试信息

    /******************************************************************************************** Qt 使用# ...

  4. C++ MFC控制台输出调试信息

    C++ MFC控制台输出调试信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1.#include <conio.h> 2.在需要开启控制台窗口的地方调用 ...

  5. 跟踪Makefile输出调试信息

    /********************************************************************** 跟踪Makefile输出调试信息* 说明:* 有时候为了 ...

  6. C++ 输出调试信息 类似MFC的TRACE等宏

    在MFC程序中有TRACE等一系列的宏可以输出调试信息, 但是其他的地方不能用了, 下面这个小程序测试了怎么输出调试信息, // Test_ErrorCode.cpp : 定义控制台应用程序的入口点. ...

  7. DebugView输出调试信息

    在写windows程序时,需要输出一些调试信息,这里介绍一种极其方便的方法.即使用OutputDebugString 在Debug模式下输出调试信息,在Release模式下不输出. 我们可以在VS的集 ...

  8. 在MFC,Win32程序中向控制台(Console)窗口输出调试信息

    在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息:另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行. 其实有一种方法可以更 ...

  9. php语法中可以输出调试信息,怎么优雅的输出PHP调试信息

    如何优雅的输出PHP调试信息 经常因为出现紧急bug而被老板骂的同事,为了更快的修复而直接利用线上的错误环境现场debug,并直接在页面上echo和dump.结果被老板发现了,又是一通臭骂.那么有没有 ...

最新文章

  1. 在asp.net中调用Office来制作各种(3D)统计图
  2. WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标
  3. 科大星云诗社动态20210509
  4. 搞定系统设计 01:从 0 到百万用户的系统
  5. PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读
  6. react中嵌入网页_在网站中添加 React
  7. python中的构造函数_python构造函数init实例方法解析
  8. 关于有窗口元素和无窗口元素
  9. Android学习系列--App缓存管理
  10. 外联样式表添加到html中,CSS联样式表之内联式、外联式和嵌入式
  11. c语言周信东实验答案,桂林电子科技大学-C语言-程序设计-习题-答案(周信东)-实验4--数-组...
  12. [Tizen开发]SDB调试工具使用简介
  13. PHP PDO的简单使用(query(),exec(),prepare(),Transaction,行锁)
  14. 黑马MFC教程总结(后续更新)
  15. 安卓客户端代码中修改服务器ip,安卓客户端代码中修改服务器ip
  16. redis源码阅读—hyperloglog(基数统计)
  17. javascript中的字符串编码转换
  18. Stochastic Variance Reduced Ensemble Adversarial Attack for Boosting the Adversarial Transferability
  19. 【无人机航测实习简明教程】1 无人机航测常见名词术语解释
  20. Android App设计架构

热门文章

  1. windows+Texstudio+languagetool修改语法错误
  2. 终有一天,你没法成为曾经梦里的那个人了。
  3. 从零开始学python项目_从零开始学Python程序设计
  4. Apollo6.0 + lgSVL 联合仿真平台搭建
  5. Python 小白学习之:linux 基础和 python 入门
  6. Python: PS 滤镜--马赛克
  7. Zing实现本地相册识别二维码
  8. CISC 与 RISC 对比
  9. 2011刚上市的句子
  10. Python爬虫:爬取喜马拉雅音频数据详解