打印
[应用相关]

嵌入式平台上的 printf 函数,直接重写 fputc 函数:

[复制链接]
510|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嵌入式平台上的 printf 函数
在嵌入式系统中,由于没有固定的显示设备,printf 函数的输出需要重定向到一个特定的输出设备,例如串口。实现的方法是重定向 fputc 函数。

重定向 fputc 函数
要使用 printf 函数并通过串口输出,需要将 fputc 函数重定向到串口发送函数。

使用微库(MicroLib)
最简单的方式是直接重写 fputc 函数:

c

int fputc(int ch, FILE *f) {
    uart_putc(ch);  // 硬件串口发送函数
    return ch;
}
在 Keil 环境中,勾选 "Use MicroLib" 选项即可。

不使用微库
这种方式稍复杂一些,需要告知编译器不使用半主机,并重写 fputc 函数,同时增加一些附带的函数和变量。

c
__asm(".global __use_no_semihosting");

FILE __stdout;
FILE __stdin;

void _sys_exit(int x) {
    x = x;
}

int fputc(int ch, FILE *f) {
    uart_putc(ch);  // 硬件串口发送函数
    return ch;
}
如何不使用半主机
对于汇编文件,在文件中添加:IMPORT __use_no_semihosting
对于 C 文件,使用 Arm Compiler 5,在文件中添加:#pragma import(__use_no_semihosting)
对于 C 文件,使用 Arm Compiler 6,在文件中添加:__asm(".global __use_no_semihosting");
注意:同一个工程中,只需在一个文件中添加即可,不用重复添加。

使用特权

评论回复
沙发
菜鸟的第一步| | 2024-8-7 14:01 | 只看该作者
还是有微库方便啊

使用特权

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

本版积分规则

46

主题

603

帖子

1

粉丝