gpt4 book ai didi

c - 使用 arm-none-eabi 工具链时重新定义 fputc 函数

转载 作者:行者123 更新时间:2023-12-04 01:54:11 25 4
gpt4 key购买 nike

我们有一个 STM32 C/C++ 项目,我们重新定义了弱的 fputc(int, FILE *) 函数以重定向 printf 输出到一些 UART channel 。

到目前为止,我们在 IAR 下使用 IAR compiler 构建项目.通过 UART 进行的日志记录工作正常。

我们现在已切换到 arm-none-eabi 工具链,并正在使用 g++ 构建项目。但看起来 fputc 函数的重新定义不再链接,因此 UART 日志记录不起作用。

如何通过 printf 强制使用重新定义的函数?

最佳答案

arm-none-eabi- 工具链正在使用 newlib,它允许您重新定义 _write(int fd, const void *buf, size_t count) 而不是所有 stdio输出函数将使用该接口(interface)。 fd==1 对应于 stdoutfd==2 对应于 stderr。您必须提供更多 stub 函数,例如

void _exit(int) {
while(1)
;
}

等它们中的大多数都是微不足道的,但是 printf() 也需要一个有效的 _sbrk(),因为它在内部使用了 malloc()

关于c - 使用 arm-none-eabi 工具链时重新定义 fputc 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51515052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com