打印
[牛人杂谈]

单片机编程中printf函数重定向需要实现哪个函数?为何感觉开发C51和arm单片机自己实现的...

[复制链接]
51|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
598330983|  楼主 | 2025-2-15 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在单片机编程中,printf 函数的重定向通常需要实现 int putchar(int ch) 或 int fputc(int ch, FILE *f) 函数。具体实现取决于编译器和开发环境。

1. 重定向 printf 函数
printf 函数依赖于底层的输出函数来发送字符。在嵌入式系统中,通常没有标准输出设备(如终端),因此需要将输出重定向到串口、LCD 或其他设备。

实现 putchar 或 fputc
putchar(int ch): 这是最简单的实现方式,通常用于简单的嵌入式系统。你需要在这个函数中将字符发送到目标设备(如串口)。
int putchar(int ch) {
    // 例如,发送字符到串口
    UART_SendChar(ch);
    return ch;
}
fputc(int ch, FILE *f): 这是更通用的实现方式,适用于支持标准库的系统。fputc 是标准库函数,printf 会调用它来输出字符。
int fputc(int ch, FILE *f) {
    // 例如,发送字符到串口
    UART_SendChar(ch);
    return ch;
}
2. C51 和 ARM 单片机实现不同的原因
C51 和 ARM 单片机在实现 printf 重定向时可能有差异,主要原因如下:

编译器差异
C51 编译器: 通常使用 Keil C51 编译器,它对标准库的支持有限,可能更依赖 putchar 函数。

ARM 编译器: 如 GCC 或 ARMCC,通常支持更完整的标准库,可能更依赖 fputc 函数。

标准库支持
C51: 标准库支持较弱,通常需要手动实现 putchar。

ARM: 标准库支持较强,通常需要实现 fputc,且可能涉及更复杂的文件操作。

硬件差异
C51: 硬件资源有限,通常使用简单的串口通信。

ARM: 硬件资源丰富,可能使用更复杂的通信方式(如 DMA、中断等)。

总结
C51: 通常实现 putchar 函数。

ARM: 通常实现 fputc 函数。

具体实现应根据编译器和硬件平台的要求进行调整。

使用特权

评论回复
沙发
598330983|  楼主 | 2025-2-15 10:51 | 只看该作者
大家发现过这个问题没,我今天终于查资料搞明白为何不同了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

253

主题

5464

帖子

22

粉丝