这里写目录标题
- 前言
- 1、需要勾选Use Micro LIB
- 2、不需要勾选Use Micro LIB
前言
最近在学习LVGL时遇到了一个坑,我原来使用的重定向方法必须要勾选Use Micro LIB,否则程序会卡死,但是在移植LVGL时又发现不能勾选Use Micro LIB,否则会报错。那么有没有什么方法能让printf和LVGL都能正常使用呢,在网上查了查,发现了如下解决思路,在这里做个记录。
1、需要勾选Use Micro LIB
在工程中添加如下代码
int fputc(int ch,FILE *f) //重构定向,printf直接打印到串口1
{USART_SendData(USART1,ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);return ch;
}
并勾选Use Micro LIB
2、不需要勾选Use Micro LIB
在工程中添加如下代码:
#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((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return ch;
}
这样就算不勾选Use Micro LIB也能正常打印,程序不会卡死。