STM32 EventRecorder printf不打印输出在调试窗口的问题解决

2023-05-16

一、添加event recorder到工程中

 也可以自己移植源码到工程里面,添加好后,工程中会多出几个文件,如下图所示,我这是自己移植的源码到工程中的,没有使用keil添加。

 二、初始化EventRecorder

#include "EventRecorder.h"
int main(void)
{

    HAL_Init();
    SystemClock_Config();
	PeriphCommonClock_Config();
	
	#if (DEBUG_LOG == 1)
	EventRecorderInitialize(EventRecordAll, 1U);
	EventRecorderStart();
	#endif
}

很简单就EventRecorderInitialize(EventRecordAll, 1U); EventRecorderStart();两个函数和头文件#include "EventRecorder.h",然后就可以直接在工程中使用printf函数打印我们想要的信息了。

三、问题描述

发现经过上述的操作后,进入调试界面,并没有把输出信息打印到窗口上,网上查找虽然也发现有人和我遇到一样的问题,但是都没有得到解决。然后自己用STM32CUBEMX生成的工程就可以直接使用。

__attribute__((weak))
int fputc (int c, FILE * stream) {
#if (!defined(RTE_Compiler_IO_STDOUT) && !defined(RTE_Compiler_IO_STDERR))
  (void)c;
  (void)stream;
#endif
 
#ifdef RTE_Compiler_IO_STDOUT
  if (stream == &__stdout) {
#if (STDOUT_CR_LF != 0)
    if (c == '\n') stdout_putchar('\r');
#endif
    return (stdout_putchar(c));
  }
#endif
 
#ifdef RTE_Compiler_IO_STDERR
  if (stream == &__stderr) {
#if (STDERR_CR_LF != 0)
    if (c == '\n') stderr_putchar('\r');
#endif
    return (stderr_putchar(c));
  }
#endif
 
  return (-1);
}

找到EventRecorder对应重写的fputc函数,发现上面的宏定义导致部分程序是置灰的,也就是没有编译,才找到原因,是需要增加宏定义来打开对应的功能。

/*  Keil.ARM Compiler::Compiler:Event Recorder:DAP:1.4.0 */
#define RTE_Compiler_EventRecorder
#define RTE_Compiler_EventRecorder_DAP
/*  Keil.ARM Compiler::Compiler:I/O:STDOUT:EVR:1.2.0 */
#define RTE_Compiler_IO_STDOUT          /* Compiler I/O: STDOUT */
#define RTE_Compiler_IO_STDOUT_EVR      /* Compiler I/O: STDOUT EVR */

把这个宏定义增加到RTE_Components.h中即可,就解决了没有输出的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 EventRecorder printf不打印输出在调试窗口的问题解决 的相关文章

  • 正则表达式精确单词匹配

    我需要匹配行中的单词 例如 The blue bird is dancing Yellow card is drawn The day is perfect rainy blue bird is eating 这四行位于文本文件中l2 我想
  • 避免 printf() 中的尾随零

    我一直在发现 printf 系列函数的格式说明符 我想要的是能够打印小数点后最大给定位数的双精度 或浮点数 如果我使用 printf 1 3f 359 01335 printf 1 3f 359 00999 I get 359 013 35
  • 使用 printf 在 c 中 fork() [重复]

    这个问题在这里已经有答案了 有 2 个不同的程序 它们都很小 例如 int main printf print hello fork int main printf print hello n fork 输出 1 是 print hello
  • 打印一个字符*

    我提前为这个愚蠢的问题道歉 这是我的结构定义 struct vcard char cnet char email char fname char lname char tel 我正在尝试使用函数 vcard show vcard c 打印此
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • printf 命令导致段错误? [复制]

    这个问题在这里已经有答案了 当我尝试初始化一个大型的二维字符数组时 它工作得很好 但是当我添加一个简单的打印命令时 它给了我一个分段错误 关于为什么会发生这种情况有什么想法吗 include
  • 使用 ncurses 处理转义序列? printf 是否处理转义序列?

    我的程序从网络读取一些文本数据 例如 Hello 033 1 34mworld 033 0m and bla bla bla n 当程序使用prinf输出该字符串时 world 一词是蓝色的 但是当我将 ncurses 接口与 wprint
  • 仅使用 fprintf 和 fscanf 替换文本文件中的字符串

    抱歉问这么简单的问题 这是我作业的一部分 我被困住了 如你看到的 include
  • sprintf 风格字符串格式化的起源

    字符串格式化概念见sprintf如今几乎可以在任何语言中找到 你知道 用 s d f 等掩盖字符串 并提供变量列表来填充它们的位置 哪种语言最初具有提供此功能的库函数或语言结构 请指定某种来源参考以确认您的主张 以便我们避免纯粹的猜测或猜测
  • C 编程:正向变量参数列表

    我正在尝试编写一个函数 它接受可变数量的参数 如 printf 执行一些操作 然后将变量列表传递给 printf 我不知道如何做到这一点 因为它似乎必须将它们推入堆栈 大约是这样的 http pastie org 694844 http p
  • fprintf 调试断言失败

    我有一个程序 如果我手动启动它 它可以正确运行 但是 如果我尝试添加注册表项以在启动过程中自动启动它 则会收到以下错误 Debug assertion failed str null fprintf c line 55 我尝试在发生任何事情
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • awk 的 printf 插入多个变量的正确语法是什么?

    我复制了一些使用 printf 输出字符串在文件中出现的频率的代码 awk BEGIN print The number of times a appears in the file a a counter 1 END printf s n
  • awk 每个文件后换行

    使用此脚本 每个字段都会根据当前文件的最长单词打印出来 但需要每个文件都有一个换行符 如何才能实现这一目标 awk BEGIN ORS n FNR NR a i 0 if length 0 gt length max max 0 l len
  • Arduino sprintf float 未格式化

    我有这个arduino草图 char temperature 10 float temp 10 55 sprintf temperature f F temp Serial println temperature 温度打印为 F 关于如何格
  • 在C语言中如何对齐这样的数字?

    我需要将 C 中的一系列数字与printf 就像这个例子 1 5 50 100 1000 当然 所有这些之间都有数字 但这与当前的问题无关 哦 将破折号视为空格 我使用破折号 这样更容易理解我想要的内容 我只能这样做 1 5 50 100
  • C语言中%f和%lf有什么区别?

    我在一本C书的C示例中看到过这两个参数 但是作者没有详细说明两者有什么区别 我知道 f指定一个float应该取代它的位置 我曾尝试查找此内容 但很难找到解释 关于什么 lf 简短的回答是 它不会影响printf 并表示使用float or
  • Qt qDebug() 在 Windows shell 中不起作用

    我正在使用一个qDebug Qt 框架的printf屏幕上有东西 当我从 Qt Creator 运行应用程序时它工作得很好 但是当我尝试从 Windows 执行它时cmd它什么也没显示 为什么会发生这种情况 你必须添加 CONFIG con
  • 了解如何 printf("%d\n", ( { int n; scanf("%d", &n); n*n; } ));在 C 语言中工作

    我通过一个途径发现了这个程序 include
  • 在 execl 在输出中不可见之前打印

    include

随机推荐

  • 进阶之路:Prometheus —— 技巧篇

    前言 入门篇 xff1a 从零开始 xff1a Prometheus 理解篇 xff1a 进阶之路 xff1a Prometheus 理解篇 本文记录了一些我在使用Prometheus的过程中的技巧 xff0c 以后还会随着使用的深入不定期
  • Linux系统如何离线安装软件

    Linux系统如何离线安装软件 前言 xff08 一堆废话 xff0c 不看也罢 xff09 功能需求具体操作 前言 xff08 一堆废话 xff0c 不看也罢 xff09 升学足足两个月了 xff0c 但是截至目前 xff0c 还没有认认
  • python中出现变量前后带下划线的是什么意思

    前后没有下划线的是公有方法 xff0c 前边有一个下划线的为私有方法或属性 xff0c 子类无法继承 xff0c 前边有两个下划线的 一般是为了避免于子类属性或者方法名冲突 xff0c 无法在外部直接访问 前后都有双下划线的为系统方法或属性
  • 普通程序员如何入门AI

    毫无疑问 xff0c 人工智能是目前整个互联网领域最火的行业 xff0c 随着AlphaGo战胜世界围棋冠军 xff0c 以及各种无人驾驶 智能家居项目的布道 xff0c 人们已经意识到了AI就是下一个风口 当然 xff0c 程序员是我见过
  • 扩展卡尔曼线性化近似与仿真

    扩展卡尔曼线性化近似与仿真 关于线性化直入主题 上例子小车运动方式 xff1a 沿着圆心在原点 半径为5的圆进行匀速圆周运动 xff0c 其角速度为w 即每次更新变化w个角度 仿真结果总结Matlab测试代码 xff08 EKF test
  • Ubuntu挂载硬盘

    Ubuntu挂载硬盘 1 查看磁盘信息命令 fdisk l 2 查看硬盘的UUID命令sudo blkid 3 mkdir创建挂载点WorkpaceP2和WorkpaceP2 4 永久性挂载分区 xff0c 修改分区文件 xff0c 输入如
  • FreeRTOS——创建任务

    FreeRTOS的设计小巧且简易 xff0c 整个核心代码只有3到4个C文件 xff0c 为了让代码容易阅读 移植和维护 xff0c 大部分的代码都是以C语言编写 xff0c 只有一些函数 xff08 多数是架构特定排班副程序 xff09
  • QT二次开发Kvaser

    前言 最近工作中需要自己去开发一个上位机 xff0c 上位机的通讯方式是CAN xff0c 利用Kvaser将CAN信息传递到上位机 xff0c 所以就需要二次开发Kvaser xff0c 保证上位机的正常通讯 原本是本着前人栽树 xff0
  • Ubuntu 安装ROS (解决rosdep init 失败)

    当前网络上有很多的ROS安装教程 xff0c 但是由于国内的网络问题 xff0c 所以在教程进行到rosdep init时 xff0c 会出现问题 xff0c 所以这篇博客主要解决这个问题 xff0c 以下为教程全部内容 xff1a 引用教
  • Ubuntu20.04部署编译LVI-SAM

    该动图来自LVI SAM开源地址 xff08 https github com TixiaoShan LVI SAM xff09 1 写在开头 1 1 为何诞生此文 近期在学习SLAM相关知识 xff0c 拜读了此篇经典论文LVI SAM
  • QT中的强制类型转换

    当使用C语言那种形式的强制转换 xff0c 发现QT会给出一个使用旧的方式的警告 所以在QT中使用如下类型转换 xff0c 就不会有警告 xff0c 而且这种方式的强制转换更加的安全 xff08 1 xff09 dynamic cast l
  • QT之QCharts的使用(绘制折线图)

    一 画折线图 1 修改 pro文件 在里面添加QT 43 61 charts 2 MyWidget h程序 ifndef MYWIDGET H define MYWIDGET H include lt QWidget gt 添加以下三个头文
  • 恢复经过软件处理过的U盘导致的U盘空间显示不正确等问题

    1 win 43 R xff0c 打开运行 xff0c 输入CMD xff0c 点击确定 2 在命令行中输入DISKPART并回车 xff0c 会跳出一个窗口 xff0c 这就进入了diskpart 3 在跳出的窗口diskpart 中输入
  • 关于STM32 CAN 发送失败问题解释

    首先解释一下CAN几个配置的功能 xff1a 1 CAN InitStruct CAN TTCM 61 DISABLE 这个只在某些CAN标准中使用 xff0c 就设置为DISABLE 2 CAN InitStruct CAN ABOM 6
  • VS2022调试vector无法显示详细信息

    使用vs2022调试vector发现这样的现象 xff1a 为了显示vector大小以及详细的元素 xff0c 需要编写natvis文件 span class token operator lt span span class token
  • STM32H7 PVD断电的使用

    1 遇到的问题 我使用的是STM32H747 xff0c 在初始化后发现断电后并没有进入中断 最后查找到因为STM32H747是双核CPU xff0c 在HAL库源码中 xff0c 有双核的宏定义将一些配置给屏蔽了 xff0c 因为我只用到
  • STM32H7A3 ADC+DMA使用问题

    问题1 xff1a DMA采用半字传输16位ADC值 xff0c 用于存储ADC数据的数组一定是采集数的两倍 xff0c 否则会产生ADC溢出的错误中断HAL ADC ErrorCallback xff0c 从而无法进入ADC采集完成中断H
  • STM32使用RTOS BootLoader跳转app进入异常中断问题

    一 问题描述 在boot中不使用RTOS xff0c 跳转到APP中 xff0c APP可以正常运行 但是boot中使用RTOS跳转到APP中 xff0c 程序配置完时钟后就会进入MemManage Handler错误中断 二 解决方法 1
  • STM32H7 SPI+DMA只发送一次,然后一直报busy的问题

    网上看了很多讲SPI 43 DMA问题的帖子 xff0c 有说必须发送DMA和接收DMA必须同时配置的 xff0c 有的说DMA发送前需要手动调用HAL SPI Abort函数的 首先我尝试的同时配置发送DMA和接收DMA xff0c 还是
  • STM32 EventRecorder printf不打印输出在调试窗口的问题解决

    一 添加event recorder到工程中 也可以自己移植源码到工程里面 xff0c 添加好后 xff0c 工程中会多出几个文件 xff0c 如下图所示 xff0c 我这是自己移植的源码到工程中的 xff0c 没有使用keil添加 二 初