keil jlink调试使用助手printf

利用JLINK实现printf功能。

主要是利用Jlink SW模式下自带的trace功能,使能Trace。点击Settings使能Trace。



 

 

新建头文件、源文件添加至工程:

头文件中添加:

 

#define ITM_Port8(n)    (*((volatile unsigned char*)(0xE0000000+4*n)))

#define ITM_Port16(n)   (*((volatile unsignedshort*)(0xE0000000+4*n)))

#define ITM_Port32(n)   (*((volatile unsigned long*)(0xE0000000+4*n)))

 

#define DEMCR           (*((volatile unsigned long*)(0xE000EDFC)))

#define TRCENA          0x01000000

 

源文件中添加:

#include "stdio.h"

 

struct __FILE { int handle; /* Add whateveryou need here */ };

FILE __stdout;

FILE __stdin;

 

int fputc(int ch, FILE *f) {

  if(DEMCR & TRCENA) {

   while (ITM_Port32(0) == 0);

   ITM_Port8(0) = ch;

  }

 return(ch);

}

 

接着,在工程打开view->serial windows->Debug (printf)viewer。

在程序中添加printf,则可在Debug(printf) Viewer中进行查看。


官方地址:

http://www.keil.com/support/man/docs/jlink/jlink_trace_itm_viewer.htm


在开发过程中,printf函数是一种常用的输出日志信息的方式,可以帮助快速定位问题的原因。在单片机开发中,如果要使用printf函数,需要先对fputc函数进行重定向。这样,printf函数会先将用户字符串格式化,然后调用fputc函数逐个处理字符串中的字符,如果fputc函数被定义为串口输出函数,则printf最终会将字符串通过串口输出。这种方式是最常见的,但也可以通过适配不同的fputc函数来实现通过其他通信接口(比如SPI、CAN或屏幕)输出字符串。然而,从通信接口输出会比较耗时,不适用于一些实时性要求较高的系统。为了解决实时性问题,一些开发者发明了将fputc重定向输出到RAM,然后利用调试器从RAM中读取固定格式的数据来实现快速输出日志信息的方法。 在KEIL中,printf函数可以使用SEGGER的RTT组件来实现。RTT组件提供了SEGGER_RTT_printf函数,可以用于打印日志信息。这个函数需要指定要打印的字符串以及其他参数,在调用时会将格式化后的字符串通过fputc函数输出。然而,需要注意的是,SEGGER_RTT_printf函数不支持打印中文和浮点数。如果需要打印中文和浮点数,可以使用printf函数,并在fputc函数中调用该函数来实现。 另外,有人使用72MHz的stm32f105芯片配合KEIL的Event Recorder中间件进行打印测试,发现使用SEGGER的RTT组件的printf函数会比Event Recorder中间件的printf函数速度更快一些。这可能是因为Event Recorder中间件使用printf函数,而SEGGER的RTT组件在精简了printf函数的基础上进行了优化,不支持浮点数和中文,从而提高了速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [调试笔记--keil printf小技巧](https://blog.csdn.net/weixin_42378319/article/details/117920784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值