Chinaunix首页 | 论坛 | 博客
  • 博客访问: 723511
  • 博文数量: 124
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-02 10:29
文章分类

全部博文(124)

文章存档

2012年(3)

2011年(2)

2010年(61)

2009年(34)

2008年(24)

我的朋友

分类: LINUX

2008-11-24 15:13:23

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
阅读(1633) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~