嵌入式C语言中printf函数的使用(二)——SWO引脚的巧妙应用
来源:互联网 发布:独角仙 数码兽数据库 编辑:程序博客网 时间:2024/06/05 09:44
在Cortex-M3\M4系列MCU中,内核的调试组件都有一个仪器化跟踪单元(ITM)。ITM的一个主要的用途,就是支持调试信息的输出(例如,printf格式输出)。ITM包含了32个刺激端口,允许不同的软件把数据输出到不同的端口,从而让调试主机可以把它们的信息分离开。每个端口都可以独立的使能/除能,还可以允许或禁止用户进程对它执行写操作。那么这些与MCU的SWO引脚有什么关系呢?刚才我们有说ITM包含了32个端口,其中SWO引脚,就是ITM模块的端口0,我们可以直接用它来输出一些调试信息。那么现在就看看如何使用它吧。
当MCU连接好J-link之后,我们在工程中的主函数起始处添加stdio.h文件,如下所示。
#include <stdio.h>
接下来为了能直接调用printf函数格式化输出,又需要用到我们之前提到的重定向技术了,只是这次不是重定向到串口,而是ITM模块的0通道,即SWO引脚。如程序清单 1所示。
int fputc(int ch, FILE *f) { ITM_SendChar(ch); return(ch);}
其中ITM_SengChar函数是core_cm4.h内核文件里定义的内联函数,我们可以直接调用。
完成重定向之后,我们写了个定时打印HelloWorld的程序。打开Keil工程的【Options for Target】->【debug】->【settings】->【Trace】,对Trace选项卡进行如图 3所示的配置。
图 3 Trace选项卡配置
点击确定之后,进入调试模式,打开【View】->【Serial Windows】->【Debug(printf) Viewer】,这时我们就可以看到MCU通过J-link向编译器输出的打印信息了,如图 4所示。打印速度还很快哦。
图 4 Debug Viewer窗口
到此我们算是学会了使用SWO引脚来调试输出了,是不是很酷哦。细心的网友可能会发现为什么Cortex-M0\M0+内核的MCU没有找到SWO引脚呢?这是因为它们采用的还是ARM-V6的老架构,内核的调试组件没有ITM模块。
- 嵌入式C语言中printf函数的使用(二)——SWO引脚的巧妙应用
- 浅谈工程师的调试法宝(三)---SWO引脚的巧妙应用
- 嵌入式c语言中printf函数的使用(一)——将MCU的UART、IIC、或SPI与printf函数连接
- C语言中巧妙的使用#和##
- C语言中Printf()函数的运行机制
- c语言printf函数的使用详解
- 嵌入式C语言编程中Inline函数的应用
- STM32使用SWO引脚调试
- 编程基础——C语言printf()函数的用法
- C语言——printf函数的结合顺序
- C语言——printf函数的结合顺序
- 关于C语言中printf函数的一个问题
- c语言中可变参数的原理---printf()函数
- c语言中可变参数的原理---printf()函数
- 关于C语言中printf函数的参数执行顺序
- 对c语言中printf函数的个人理解
- C语言printf()函数中一些不为人知的技巧!
- C语言printf()函数中一些不为人知的技巧!
- 单链表的各操作实现
- GridLayout使用2
- 【JavaScript】多输入框的输入字数即时检查
- 初尝2D骨骼动画编辑工具SPINE
- 全排列生成算法之字典序
- 嵌入式C语言中printf函数的使用(二)——SWO引脚的巧妙应用
- poj 1287||zoj 1372 Networking 最小生成树 kruskal 克鲁斯卡尔算法
- JAVA2核心技术中的GBC类
- hdu1757---A Simple Math Problem(矩阵)
- IOS 调整内存中的图片大小
- HDU 5011-Game(尼姆博弈)
- CSDN-markdown编辑器简洁的语法与呈现效果对照2
- 编程好的规则
- Spinner入门1