http://blog.csdn.net/rssn_net/archive/2008/09/22/2961233.aspx
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
阅读(1681) | 评论(0) | 转发(0) |