欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

关于调试输出printf移植问题

程序员文章站 2022-03-23 18:59:08
关于printf移植的相关问题一、 移植printf时,直接添加以下函数#if defined ( __ICCARM__ ) //IAR使用//重定义fputc函数 int fputc(int ch, FILE *f){ while((USR_Sensor->ISR &0X40)==0);//循环发送,直到发送完毕 USR_Sensor->TDR = (uint8_t) ch; return ch;}#else//加入以下代码,支持pr...

关于printf移植的相关问题

一、 移植printf时,直接添加以下函数


#if defined ( __ICCARM__ )  //IAR使用
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 
    while((USR_Sensor->ISR &0X40)==0);//循环发送,直到发送完毕   
    USR_Sensor->TDR  = (uint8_t) ch; 
  return ch;
}
#else
//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
//#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 
}; 
FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 	
	while((USR_Sensor->ISR &0X40)==0);//循环发送,直到发送完毕   
	USR_Sensor->TDR  = (uint8_t) ch;  
	return ch;
}
#endif




其中USR_Sensor为调试串口的句柄,设置如下:

#define USR_Sensor 		    USART1  //(利用串口一通信)

除添加函数之外,需要添加头文件

#include <string.h>

以上基本完成相关配置操作直接调用 printf("Hello world!"); 即可输出相关字符用于调试


当然BUG是无处不在的
如若编译过程中会出现文件 FILE 未定义,那就采用简单粗暴的方法解决吧:关机重启->歇一天->喝喝茶->开机

???这么简单??? -------程序猿在街边快哭了。

直接进入编译器设置中,找到库的范围选中所有库,即可关于调试输出printf移植问题

以上即可解决大部分移植问题,如若还有问题出现,那么恭喜,你又发现一项新技能~


BUG 使我头秃~

本文地址:https://blog.csdn.net/weixin_40692163/article/details/107559383