__io_putchar() 和 __io_getchar() 定义在哪个文件中?

问题描述 投票:0回答:2

我注意到 STM32F407-DISC 项目(通过 STM32CubeIDE 制作)的

syscalls.c
文件具有
__io_putchar()
__io_getchar()
作为外部文件。
但我无法在项目中找到实际定义这些函数的任何文件。

这是

syscalls.c
文件中的内容:

extern int __io_putchar(int ch) __attribute__((weak));
extern int __io_getchar(void) __attribute__((weak));

有谁知道这些外部人员从哪个文件中提取?

提前致谢!

stm32 stm32f4discovery stm32cubeide
2个回答
4
投票

它们在标准库中。所以你的项目中没有代码。您需要下载(克隆)STMCubeIDE工具链使用的标准库实现的源代码。

只需编写您自己的,它们就会用弱链接替换那些。


0
投票

您可以根据需要实现它们,让我向您展示我的示例实现。当然,USART 必须先初始化。我用的是1.5M波特率,所以速度相当快,程序长时间不阻塞。

int __io_putchar(int ch) {
    // Code to write character 'ch' on the UART
    while(!(USART3->ISR & USART_ISR_TXE));
    USART3->TDR = ch;
    return ch;  //  On success, the character written is returned.
    //  If a writing error occurs, EOF is returned and the error indicator (ferror) is set.
}

int __io_getchar(void) {
    // Code to read a character from the UART

    // timeout version:
    // uint32_t = 0;
    // while((!(USART3->ISR & USART_ISR_RXNE)) && --t);
    // if (!t) return EOF;

    // blocking read version:
    while(!(USART3->ISR & USART_ISR_RXNE));
    return USART3->RDR;
}
© www.soinside.com 2019 - 2024. All rights reserved.