关于调试输出printf移植问题
程序员文章站
2022-06-08 20:57:11
...
关于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
未定义,那就采用简单粗暴的方法解决吧:关机重启->歇一天->喝喝茶->开机
???这么简单??? -------程序猿在街边快哭了。
直接进入编译器设置中,找到库的范围选中所有库,即可
以上即可解决大部分移植问题,如若还有问题出现,那么恭喜,你又发现一项新技能~
找 BUG 使我头秃~