现在做个假设,如果自己用c语言写一段hello world程序,用armlinux-gcc编译器编译好,然后用jtag烧写到板子得flash当中,程序是否可以运行?答案是相当否定的。因为这个时候,没有对底层的硬件做任何的初始化,可以通过汇编,直接对串口进行操作,但是对于gcc的printf,毕竟也是一个高级的包装函数,现在根据gcc的源代码顺藤摸瓜,看看具体是怎么实现的?
int 【相关文章:主流嵌入式Linux动态扩展技术比较分析】
//printf.c 【扩展阅读:常用文件重定向命令】
printf (const char *string, ...) 【扩展信息:LINUX中LVM的创建过程】 { va_list ap; int r; #ifdef __optimize__ if (inside_main) abort(); #endif va_start (ap, string); r = vprintf (string, ap); va_end (ap); return r; }//vprintf.c
nt
vprintf (format, ap) const char *format; va_list ap; { return vfprintf (stdout, format, ap); } //file *stdouttypedef struct _iobuf
{ char* _ptr; int _cnt; char* _base; int _flag; int _file; int _charbuf; int _bufsiz; char* _tmpfname; } file;//vfprintf.c
int
vfprintf (stream, format, ap) file * stream; const char * format; va_list ap; { return _doprnt (format, ap, stream); }//_doprnt.c
int _doprnt (format, ap, stream) const char * format; va_list ap; file * stream; { const char * ptr = format; char specifier[128]; int total_printed = 0; while (*ptr != ) { if (*ptr != %) /* while we have regular characters, print them. */ ... 下一页