打印
[文档下载]

printf 重定向

[复制链接]
1759|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

使用特权

评论回复
沙发
AloneKaven| | 2024-9-11 22:39 | 只看该作者
这么方便就可以重定向了?

使用特权

评论回复
板凳
AloneKaven| | 2024-9-11 22:44 | 只看该作者
这么方便就可以重定向了?

使用特权

评论回复
地板
呐咯密密| | 2024-9-12 16:49 | 只看该作者
这个宏定义好,比其他的方便

使用特权

评论回复
5
sheflynn| | 2024-9-13 21:25 | 只看该作者
#include <stdio.h>
#include "NuMicro.h" // 包含新唐单片机的库文件

// 重定向printf到串口
int _write(int file, char *ptr, int len)
{
    for (int i = 0; i < len; i++)
    {
        UART0->TDR = *ptr++; // 假设使用UART0作为串口输出
        while (!(UART0->SR & UART_SR_TXEMPTY)); // 等待发送完成
    }
    return len;
}

int main(void)
{
    // 初始化串口
    UART0->BAUD = UART_BAUD_MODE_DIVIDED_BY_16 | ((SystemCoreClock / 9600) - 1); // 设置波特率为9600
    UART0->CTRL |= UART_CTRL_TE; // 使能发送

    // 重定向标准输出到串口
    setvbuf(stdout, NULL, _IONBF, 0);

    // 使用printf测试
    printf("Hello, Nuvoton!\n");

    while (1)
    {
        // 主循环
    }
}

使用特权

评论回复
6
mikewalpole| | 2024-9-14 11:46 | 只看该作者
int fputc(int ch, FILE *f) {
    // 假设使用UART0作为标准输出
    while (UART0->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); // 等待直到发送缓冲区不满
    UART0->DAT = ch; // 发送字符
    return ch;
}

int fgetc(FILE *f) {
    // 假设使用UART0作为标准输入
    while (!(UART0->FIFOSTS & UART_FIFOSTS_RXNOTEMPTY_Msk)); // 等待直到接收缓冲区非空
    return (int)UART0->DAT; // 返回接收到的字符
}

使用特权

评论回复
7
kmzuaz| | 2024-9-14 13:34 | 只看该作者
在新唐(Nuvoton)单片机上使用 printf 函数,并希望将其输出重定向到非标准输出(如串口、LCD显示或其他外设)是一种常见的需求

使用特权

评论回复
8
tifmill| | 2024-9-14 15:57 | 只看该作者
通常需要包含串口相关的头文件以及stdio.h头文件,以便使用printf函数。

使用特权

评论回复
9
hilahope| | 2024-9-14 20:30 | 只看该作者
新唐单片机上的printf函数重定向是一个涉及多个步骤的过程,需要开发者对单片机的内部结构和编程有一定的了解。

使用特权

评论回复
10
uiint| | 2024-9-15 16:52 | 只看该作者
如果串口发送需要缓冲区,要确保正确处理缓冲区的满和空状态,以避免数据丢失或阻塞。

使用特权

评论回复
11
backlugin| | 2024-9-15 20:01 | 只看该作者
通过正确的配置和编程,可以实现将printf函数的输出重定向到串口或其他通信接口,从而方便地进行调试和信息显示。

使用特权

评论回复
12
janewood| | 2024-9-15 22:27 | 只看该作者
如果你使用的是微控制器专用的简化C库(如 Newlib-nano 或其他类似库),你可能需要确保你的库支持重定向,并且你正确地实现了必要的函数。

使用特权

评论回复
13
nomomy| | 2024-9-16 17:44 | 只看该作者
这个函数会在printf调用时被自动调用,每次printf输出一个字符,都会调用这个函数将字符发送到串口。

使用特权

评论回复
14
saservice| | 2024-9-16 22:38 | 只看该作者
可能需要修改链接脚本,以确保printf函数调用的是自定义的fputc函数而不是标准库中的版本。

使用特权

评论回复
15
bestwell| | 2024-9-18 18:44 | 只看该作者
包含必要的头文件              

使用特权

评论回复
16
febgxu| | 2024-9-19 10:38 | 只看该作者
需要定义putchar函数。              

使用特权

评论回复
17
nomomy| | 2024-9-19 18:38 | 只看该作者
printf函数通常是向标准输出(通常是控制台)输出数据。要实现重定向,就是要修改printf函数的输出目标,使其将数据输出到你想要的设备,如串口。

使用特权

评论回复
18
班杰明| | 2024-9-19 22:38 | 只看该作者
宏定义不能使用枚举

使用特权

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

本版积分规则

37

主题

1273

帖子

1

粉丝