2024-04-24 01:57 AM
NUCLEO-C031C6 board.
My printf over the UART works fine - would anyone be able to explain the 'bold' comment below.
How does such a simple bit of code overload the whole printf function.
What is 'small printf' ?
Regards, John.
#if defined(__GNUC__)
/* With GCC, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#endif
.
.
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART2 and Loop until the end of transmission */
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
Solved! Go to Solution.
2024-04-24 03:26 AM
Hello @John123 ,
the printf implementation in the standard library is using low-level output function like __write which uses the __io_putchar() function to put characters in the std output so by surcharging this function to call the uart_transmit() function we will get printf printing over UART with the Virtual Com Port (VCP).
so, by redefining the __io_putchar() function declared as weak in the syscalls.c into your main you simply are redirecting the function that output characters in the standard output to output to UART.
BR
2024-04-24 03:26 AM
Hello @John123 ,
the printf implementation in the standard library is using low-level output function like __write which uses the __io_putchar() function to put characters in the std output so by surcharging this function to call the uart_transmit() function we will get printf printing over UART with the Virtual Com Port (VCP).
so, by redefining the __io_putchar() function declared as weak in the syscalls.c into your main you simply are redirecting the function that output characters in the standard output to output to UART.
BR
2024-04-25 01:48 AM
Many thanks