打印
[开发工具]

keil printf小技巧

[复制链接]
1770|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函数吗?

使用特权

评论回复
5
gra22ce| | 2024-8-10 14:55 | 只看该作者
Keil MDK(Microcontroller Development Kit)是一款广泛使用的ARM Cortex-M微控制器开发工具。在使用Keil MDK进行嵌入式开发时,printf函数是一个非常有用的调试工具,但由于嵌入式系统通常没有标准输出,因此需要重定向printf函数到串口或其他输出设备

使用特权

评论回复
6
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;
}

使用特权

评论回复
7
星星点点didi| | 2024-8-10 17:16 | 只看该作者
半主机模式允许嵌入式应用程序使用主机PC的输入输出功能。在Keil中启用半主机模式后,printf可以直接输出到调试器的控制台。需要在项目选项中启用半主机模式,并在代码中包含相应的库

使用特权

评论回复
8
ewyu| | 2024-8-10 18:22 | 只看该作者
printf支持多种格式化选项,如%d(十进制整数)、%x(十六进制整数)、%f(浮点数)、%s(字符串)等。可以使用这些格式化选项来输出不同类型的数据,便于调试和查看

使用特权

评论回复
9
pe66ak| | 2024-8-10 19:27 | 只看该作者
如果串口速度较慢,可以使用sprintf将输出缓存到一个字符串中,然后一次性发送,减少串口通信的开销

使用特权

评论回复
10
twinkhahale| | 2024-8-10 20:36 | 只看该作者
在嵌入式系统中,printf的开销可能较大,特别是在中断服务例程(ISR)中使用时

使用特权

评论回复
11
wamed| | 2024-8-11 08:25 | 只看该作者
可以使用简单的字符串发送函数替代printf,或者在调试完成后移除所有printf调用,以提高性能

使用特权

评论回复
12
tiakon| | 2024-8-11 10:06 | 只看该作者
SEGGER的Real-Time Transfer(RTT)技术允许通过J-Link调试器进行高速的终端I/O操作。可以在Keil中集成SEGGER RTT库,使用SEGGER_RTT_printf函数进行输出

使用特权

评论回复
13
nuan11nuan| | 2024-8-11 11:28 | 只看该作者
可以根据调试信息的紧急程度进行分级,例如使用宏定义来控制不同级别的调试信息输出

使用特权

评论回复
14
eleg34ance| | 2024-8-11 13:41 | 只看该作者
通过microlib可以在Keil MDK中更有效地使用printf进行嵌入式系统的调试和开发

使用特权

评论回复
15
键盘手没手| | 2024-10-2 22:07 | 只看该作者
Event Recorder中间件的 fputc 使用了关键字weak

使用特权

评论回复
16
daichaodai| | 2024-10-4 10:06 | 只看该作者
一般就是通过重定向fputc函数来实现,也可以自己使用格式化字符串函数来实现。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

1409

帖子

1

粉丝