硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3107|回复: 5
收起左侧

[有问必答] printf函数重定向修改哪个底层函数

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2020-11-18 00:28:01 | 显示全部楼层 |阅读模式
硬汉我看你提供的程序都是修改fputc这个函数实现printf重定向,我很好奇你是怎么确定printf函数底层是调用fputc函数,而不是其他函数?我看了很多帖子,不同的编译器修改的底层函数也不同,例如GCC编译器是修改write函数,MDK编译器是修改fputc函数,所以我想不仅仅能够知其然,还想知其所以然,不少坛友应该也有这样的疑惑吧?我仔细查看过stdio.h中关于printf函数的声明,没有任何线索说明printf函数的底层是调用fputc函数,还望硬汉答疑解惑,多谢了。
回复

使用道具 举报

76

主题

685

回帖

913

积分

金牌会员

积分
913
发表于 2020-11-18 10:51:53 | 显示全部楼层
不同的平台提供的标准库函数底层机制不一样,重定向printf主要平台提供的printf最后调用的底层函数是哪个,说白了就是printf是与硬件无关的,对业务代码提供的接口都是一样的,但是,不同平台在实现printf的时候调用的底层函数是平台自定义的,这就导致我们使用不同的工具链如果想重定向printf就需要按照他的规矩来定义他需要的底层函数,可能是fputc,可能是write。也可能是其它的。

printf函数簇再MCU好像不大稳定,目前我在M3上使用它做浮点转换有问题,硬汉在M4上测试没出现问题。如果你在学习过程遇到找到解决方案,可以一起交流讨论。

评分

参与人数 1金币 +20 收起 理由
ZHY + 20 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2020-11-18 11:27:16 | 显示全部楼层
这个是MDK提供案例了,他们有一个专门的ARM Complier组件,里面有各种重定向,ITM,Event Recoder,使用C库或者不使用C库等

做的很齐全

回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-11-22 19:46:50 | 显示全部楼层
eric2013 发表于 2020-11-18 11:27
这个是MDK提供案例了,他们有一个专门的ARM Complier组件,里面有各种重定向,ITM,Event Recoder,使用C库 ...

硬汉,这个MDK案例及组件在哪里下载呢
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-12-2 09:32:10 | 显示全部楼层
没装MDK,用的IAR8.4,也用的这个重定向代码,目前还没问题,主要是调试看看 变量值,都是整型,小数没用过。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2020-12-3 09:12:05 | 显示全部楼层
yzz616 发表于 2020-12-2 09:32
没装MDK,用的IAR8.4,也用的这个重定向代码,目前还没问题,主要是调试看看 变量值,都是整型,小数没用过 ...

也没问题的,我们的IAR和MDK例子都是用的这种方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 04:01 , Processed in 0.251711 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表