[开发工具] keil printf小技巧

[复制链接]
2871|15
 楼主| earlmax 发表于 2024-7-22 11:06 | 显示全部楼层 |阅读模式
keil添加组件

下载后,自行安装

工程添加组件并开启 fputc 重定向至EVR


同时记得勾选使用微库

Event Recorder中间件的 fputc 使用了关键字weak,因此不要在工程中定义自己的 fputc函数,否则会覆盖 Event Recorder中间件的 fputc

初始化组件


并添加一下代码进行初始化组件

#include "EventRecorder.h"/* 初始化 EventRecorder 并开启 */EventRecorderInitialize(EventRecordAll, 1U);使用printf打印

这里顺带测量了打印耗时,可以发现使用Event Recorder中间件的printf打印耗时是us级的(和单片机有关,这里使用的是72MHz的stm32f105)



地瓜patch 发表于 2024-7-29 22:01 | 显示全部楼层
仿真中可以调用printf么
suncat0504 发表于 2024-7-30 20:01 | 显示全部楼层
中断多的时候,调试方便吗?总感觉容易出问题。
suncat0504 发表于 2024-7-30 20:02 | 显示全部楼层
印象里实现printf不是要实现putc函数吗?
gra22ce 发表于 2024-8-10 14:55 | 显示全部楼层
Keil MDK(Microcontroller Development Kit)是一款广泛使用的ARM Cortex-M微控制器开发工具。在使用Keil MDK进行嵌入式开发时,printf函数是一个非常有用的调试工具,但由于嵌入式系统通常没有标准输出,因此需要重定向printf函数到串口或其他输出设备
suiziq 发表于 2024-8-10 16:11 | 显示全部楼层
通过重定义_write函数,可以将printf输出重定向到串口。例如:#include <stdio.h>
int _write(int file, char *ptr, int len) {    for (int i = 0; i < len; i++) {ITM_SendChar((*ptr++));  // 假设使用ITM(Instrumentation Trace Macrocell)
    }
    return len;
}
星星点点didi 发表于 2024-8-10 17:16 | 显示全部楼层
半主机模式允许嵌入式应用程序使用主机PC的输入输出功能。在Keil中启用半主机模式后,printf可以直接输出到调试器的控制台。需要在项目选项中启用半主机模式,并在代码中包含相应的库
ewyu 发表于 2024-8-10 18:22 | 显示全部楼层
printf支持多种格式化选项,如%d(十进制整数)、%x(十六进制整数)、%f(浮点数)、%s(字符串)等。可以使用这些格式化选项来输出不同类型的数据,便于调试和查看
pe66ak 发表于 2024-8-10 19:27 | 显示全部楼层
如果串口速度较慢,可以使用sprintf将输出缓存到一个字符串中,然后一次性发送,减少串口通信的开销
twinkhahale 发表于 2024-8-10 20:36 | 显示全部楼层
在嵌入式系统中,printf的开销可能较大,特别是在中断服务例程(ISR)中使用时
wamed 发表于 2024-8-11 08:25 | 显示全部楼层
可以使用简单的字符串发送函数替代printf,或者在调试完成后移除所有printf调用,以提高性能
tiakon 发表于 2024-8-11 10:06 | 显示全部楼层
SEGGER的Real-Time Transfer(RTT)技术允许通过J-Link调试器进行高速的终端I/O操作。可以在Keil中集成SEGGER RTT库,使用SEGGER_RTT_printf函数进行输出
nuan11nuan 发表于 2024-8-11 11:28 | 显示全部楼层
可以根据调试信息的紧急程度进行分级,例如使用宏定义来控制不同级别的调试信息输出
eleg34ance 发表于 2024-8-11 13:41 | 显示全部楼层
通过microlib可以在Keil MDK中更有效地使用printf进行嵌入式系统的调试和开发
键盘手没手 发表于 2024-10-2 22:07 来自手机 | 显示全部楼层
Event Recorder中间件的 fputc 使用了关键字weak
daichaodai 发表于 2024-10-4 10:06 来自手机 | 显示全部楼层
一般就是通过重定向fputc函数来实现,也可以自己使用格式化字符串函数来实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

1772

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部