通过JLink的SW实现printf函数
来源:互联网 发布:日本电影推荐知乎 编辑:程序博客网 时间:2024/05/22 13:59
标准库函数printf需要调用fputc函数来实现间字符输出,所以重写fputc函数可以实现将字符输出到ITM跟踪端口,从而在MDK的Debug (printf) Viewer得到打印信息。
keil官网有关于实现的详细步骤
http://www.keil.com/support/man/docs/jlink/jlink_trace_itm_viewer.htm
根据官网说明先创建了一个文件重写了fputc函数,如下:
#include <stdio.h>#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 0x01000000struct __FILE { int handle; };FILE __stdout;FILE __stdin;int fputc(int ch, FILE *f){ if (DEMCR & TRCENA) { while(ITM_Port32(0) == 0); ITM_Port8(0) = ch; } return (ch);}
想要使用ITM功能,必须把DEMCR.TRCENA位置位,否则ITM处于除能状态,无法使用。FILE类型在stdio.h头文件中定义,所以要包含stdio.h头文件。
之后再->Debug->Settings进行MDK调试相应设置:
port位置一定选择SW模式,不能为JTAG。
在1处打勾,2处将时钟设置为当执行到printf时的CPU时钟,3处如图设置。
设置完成后就可以通过printf打印信息了,进入调试模式后打开View - Serial Windows - Debug (printf) Viewer窗口可以看到打印信息。
当如果代码中有printf函数时如果没有重写fputc函数,当程序开始运行时就会死在BKPT 0xAB处。
0 0
- 通过JLink的SW实现printf函数
- 通过JLink的SWD接口实现printf功能
- JLINK的SW调试模式连线方式
- printf 函数的实现 *
- printf函数的实现
- printf函数的实现
- 通过串口实现printf和scanf函数
- 通过串口实现printf和scanf函数
- STM32 jLink V8 的SW模式硬件调试
- 简单的printf函数实现
- printf 函数的实现原理
- 实现自己的printf函数
- printf 函数的实现原理
- 实现自己的printf函数
- printf 函数的实现原理
- printf函数的实现原理
- 实现自己的printf函数
- 实现简单的printf函数
- 带包文件的编译和运行
- 创建学生表、课程表、成绩表sql语句
- 23.Android 软键盘工具ImeUtil
- jar包开发,导入文件冲突
- java 游戏高级编程中 的对象串行化 存取
- 通过JLink的SW实现printf函数
- Git:代码冲突常见解决方法
- Android属性动画完全解析(上),初识属性动画的基本用法
- QtCreator创建的GUI Project工程文件介绍
- 使用Nexus创建Maven私有仓库
- sprintf知识
- html/css笔记
- UI星辰:疯狂食材总结
- TraceView介绍