printf/scanf库函数制作

printf和scanf是标准C中最常用的输入输出函数,裸机编程由于没有操作系统的支持,所有的库函数都不能直接使用,所以需要我们自己来实现它们

printf/scanf 的制作需要以下几个文件:

vsprintf.c  ---scanf和printf的核心算法,来自Linux内核代码
div64.S    ---64位除法运算
lib1funcs.S ---实现除法、求模操作
以上二者都是ARM汇编写的
muldi3.c   ---乘法操作函数
string.c    ---串操作标准库

printf.c    ---实现scanf和printf两个函数

另外,scanf和printf调用两个函数getc()和putc(),这两个函数依赖串口通信实现


我用的arm-elf-gcc是2.95.3版本的,编译能顺利通过,但在链接时出现以下错误:
lib/libc.a(vsprintf.o): In function `vsnprintf':
vsprintf.o(.text+0x69c): undefined reference to `__builtin_expect'
打开vsprintf.c源文件发现有一条宏定义#define unlikely(x) __builtin_expect(!!(x), 0),在网上查了一下,__builtin_expect是GCC 2.96之后版本增加的用来处理分支预测的内置函数,我的2.95.3中没有它,所以报错了。 这里可以忽略这个分支预测优化,把这条宏定义改成#define unlikely(x) (x)就OK了。

参考资料:
    《S3C2410完全开发流程》 作者:thisway.diy@163.com
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值