earlmax 发表于 2024-7-22 11:06

keil printf小技巧

keil添加组件 下载后,自行安装https://i-blog.csdnimg.cn/blog_migrate/becc4b28f0bb14fdfe9873f34c075f9d.png工程添加组件并开启 fputc 重定向至EVRhttps://i-blog.csdnimg.cn/blog_migrate/ef970e1da13a70c431b4683317760ab8.png
同时记得勾选使用微库
https://i-blog.csdnimg.cn/blog_migrate/76cda5cfd428256d343950a26f5fd9be.png
Event Recorder中间件的 fputc 使用了关键字weak,因此不要在工程中定义自己的 fputc函数,否则会覆盖 Event Recorder中间件的 fputchttps://i-blog.csdnimg.cn/blog_migrate/6a7addf9dacd2fb7f37b2956a1e655c9.png初始化组件https://i-blog.csdnimg.cn/blog_migrate/571abbf741cf013d6f0f79722f8bf44e.png
并添加一下代码进行初始化组件#include "EventRecorder.h"/* 初始化 EventRecorder 并开启 */EventRecorderInitialize(EventRecordAll, 1U);使用printf打印这里顺带测量了打印耗时,可以发现使用Event Recorder中间件的printf打印耗时是us级的(和单片机有关,这里使用的是72MHz的stm32f105)https://i-blog.csdnimg.cn/blog_migrate/658c8eeea010e7c5c6fcb18c1466acdb.png

地瓜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函数来实现,也可以自己使用格式化字符串函数来实现。
页: [1]
查看完整版本: keil printf小技巧