这几天在调试STM32H7S7L的TouchGFX工程中,需要使用到printf重定向的代码,由于使用是C11以及C++所以不能使用微库,导致卡死在printf中,查找了好久才发现的问题,如果使用C99,则与touchGFX的C++11有冲突,因此需要不能使用微库来实现重定向。
经查找成功解决,代码如下:
/* USER CODE BEGIN 1 */
/* ------------------通过重定向将printf函数映射到串口1上-------------------*/
#if !defined(__MICROLIB)
//#pragma import(__use_no_semihosting)
__asm (".global __use_no_semihosting\n\t");
void _sys_exit(int x) //避免使用半主机模式
{
x = x;
}
//__use_no_semihosting was requested, but _ttywrch was
void _ttywrch(int ch)
{
ch = ch;
}
//struct __FILE
//{
// int handle;
//};
FILE __stdout;
#endif
#if defined ( __GNUC__ ) && !defined (__clang__)
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
/* 实现串口发送一个字节数据的函数 */
//serial_write(&serial1, (uint8_t)ch); //发送一个自己的数据到串口
HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 1000);
return ch;
}记录一下,一来自己后面好查找,二来,给遇到类似情况的大佬们给予借鉴。
我要赚赏金
