M3/M4/M7都有SWO可以作为调试输出接口,而M0/M0+没有SWO,不过可以使用GDB的dprintf特性给M0/M0+添加类似SWO的调试输出能力。这在没有多余的串口可以用作调试输出口时就特别有用了。

mingdu.zheng at gmail dot com
http://blog.csdn.net/zoomdy/article/details/79251422

1、定义输出函数

定义一个空函数,该函数有一个字符串入参,函数体为空,啥也不用做,因为真正打印输出的工作是GDB来做的,这个函数提供一个接口即可。函数优化选项强制为O0,其它优化选项可能会导致str入参不可访问,访问不到str入参也就没发打印输出了。

void print_string(const char *str) __attribute__((optimize("O0")));
void print_string(const char *str)
{}

2、调用print_string

在需要打印输出的位置调用print_string函数,如果需要格式化,可以先使用snprintf函数对数据进行格式化,再将所得的结果字符串传递给print_string。

char buffer[64];
snprintf(buffer, sizeof(buffer), "PC: %X", pc);
print_string(buffer);

3、dprintf定义输出

打开GDB开始调试流程,输入dprintf命令定义输出,然后开始执行程序,后续传递给print_string函数的字符串都可以在GDB调试控制台输出了。

dprintf print_string, "%s", str

4、工作原理

dprintf命令会在print_string函数设置特殊的断点,碰到这个断点,GDB会按照dprintf的后两个参数读取并格式化数据,然后打印出来,打印完成后继续执行程序,不会像普通断点那样停下来等待命令。所以看起来就像程序打印出来的一样。
不过要注意的是,它本质上仍然是个断点,仍然会暂停程序一小段时间(几十到几百毫秒),对有实时性要求的场合,或许这一小段时间也会引起异常。对于一般的传感器应用是没有问题的。

利用dprintf为Cortex-M0/M0+添加类似SWO的调试输出口相关推荐

  1. Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?...

    什么是Progressive Web App? Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术,由Google实现,让浏览器打开的网址像APP一样运行 ...

  2. 为普通Object添加类似AttachedProperty的属性

    为普通Object添加类似AttachedProperty的属性   周银辉 我们知道,在WPF中对应一个DependencyObject,我们很容易通过AttachedProperty来为类型附加一 ...

  3. 《Excel 职场手册:260招菜鸟变达人》一第 13 招 利用数据验证给单元格添加注释,不用批注...

    本节书摘来异步社区<Excel 职场手册:260招菜鸟变达人>一书中的第1章,第13节,作者: 聂春霞 , 佛山小老鼠 责编: 王峰松,更多章节内容可以访问云栖社区"异步社区&q ...

  4. jsp里加java代码,利用静态内部类为您的代码添加辅助功能-JSP教程,Java技巧及代码...

    利用静态内部类为您的代码添加辅助功能 作者 john d. mitchell 摘要这个技巧提供了一个实例,它可以利用静态内部类为您的类添加独立的.可选的辅助功能,例如测试和示例代码等.( 500 字) ...

  5. 利用Grafana为你的Loki添加告警

    正文共:2119字 预计阅读时间:6分钟 做过运维的同学都知道,服务的可观测性是一个非常重要的渠道,能够让我们掌控线上服务运行时的状态.一个好的监控系统,其价值在于一旦出现故障能够让我们运维的同学能够 ...

  6. 利用PDF编辑软件给PDF添加页码的操作全过程

    还记得小时候,在微机电脑课时.老师在教给大家一项操作的时候,老师肯定会详细的,一步一步的将操作全过程展示给大家.老师们如此严谨其,目的也就是为了防止学生们再操作中因为细小的问题,而导致全盘皆错.一步一 ...

  7. linux在指定行添加内容,linux下利用shell在指定的行添加内容的方法

    linux下利用shell在指定的行添加内容的方法 在linux的一些配置中总会要进行某个文件中的某行的操作,进行增加,修改,删除等操作. 而这里主要是进行的是指定的行添加数据的操作: 脚本如下: s ...

  8. 利用matlab,在信号上添加给定SNR(dB)或给定方差的高斯白噪声

    利用matlab,在信号上添加给定SNR(dB)或给定方差的高斯白噪声 1. 添加给定SNR的噪声 向信号添加SNR=53dB的高斯白噪声 rng defaultSNR = 53; y = randn ...

  9. 在linux环境中利用efibootmgr管理efi启动项[添加、删除、改变顺序]

    在linux环境中利用efibootmgr管理efi启动项[添加.删除.改变顺序] 本例可以解决uefi双系统中启动顺序的问题,首先确保自己的机器为uefi固件 在Terminel中输入efiboot ...

  10. 利用NATAPP隧道解决微信公众号开发之本地调试难题

    文章目录 公众号的分类 微信公众平台: 编辑模式 开发模式 开发模式配置流程 1.登录测试号页面,可以看到该测试号相关的信息 2.配置参数介绍 3.搭建本地应用(java/python/php等语言均 ...

最新文章

  1. (五)Oracle学习笔记—— 视图
  2. 工业物联网时代,这五大职业跻身新热门
  3. OSError: [WinError 126] 找不到指定的模块
  4. .NET中书写XML的一种简单方法
  5. arrays中copyof复制两个数组_数组,及二维数组
  6. 产品设计的从0到1全流程:以优惠券为例
  7. 关于MSSQL数据存储的问题
  8. oracle s7-2,Oracle S7-2服务器硬盘7302552 7094132原装7093015 7093037 7317908
  9. php debug用什么意思,phpdebug_backtrace()函数是干什么的?
  10. Tensorflow+gpu安装
  11. ajax异步验证效果展示,AJAX(二)-实现验证码异步验证功能(示例代码)
  12. Windows 必知命令
  13. java frameview_Java FrameLayout.removeView方法代码示例
  14. 方法同时使用微服务调用文件上传方法以及调用另一微服务的方法时报错failed to parse multipart servlet Request
  15. 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
  16. python模拟火车票订票系统_除夕火车票明天开售,上海各大火车站售票时间都在这...
  17. 内存数据库及技术选型
  18. 信息检索与利用(第三版)第一章
  19. 宝宝泡药浴和直接吃药有什么区别吗?
  20. [PAL规范]SAP HANA PAL 数据处理四分位间距检测Inter-quartile Range Test编程规范IQRTEST...

热门文章

  1. 如何把电脑视频转换成MP4格式?视频转换用嗨格式
  2. SpringBoot逻辑删除
  3. 高可用PgSQL集群架构设计与落地
  4. 软件架构风格——4+1视图、5大传统架构风格及其它风格
  5. verilog 学习笔记2 异步复位串联T触发器
  6. Apple Pay 详解
  7. 《微积分:一元函数微分学》——导数公式
  8. 如何快速统计考勤(bushi)
  9. 移动硬盘做笔记本硬盘
  10. linux管理员下安装网易云,在Ubuntu 18.10系统中安装网易云音乐的方法