S5PV210_uart stdio移植

1、stdio : standard input output 标准输入输出

2、printf函数调用到的2个关键函数:

vsprintf : 格式化打印信息,最终得到纯字符串的打印信息等待输出

putc : 操控标准输出的硬件,将信息发送出去

3、移植步骤:

(1)解压printf.rar到uart_stdio目录,解压后会有include、lib两个目录,其中include放的是相关头文件,lib放的是printf、scanf相关的代码;

S5PV210_uart stdio移植_第1张图片

(2)修改uart_stdio目录下的makefile,将lib目录下的代码编译链接成lib.a,然后将lib.a编译进bin中;

 1 CC        = arm-linux-gcc
 2 LD         = arm-linux-ld
 3 OBJCOPY    = arm-linux-objcopy
 4 OBJDUMP    = arm-linux-objdump
 5 AR        = arm-linux-ar
 6 
 7 INCDIR    := $(shell pwd)
 8 # C预处理器的flag,flag就是编译器可选的选项
 9 CPPFLAGS    := -nostdlib -nostdinc -I$(INCDIR)/include
10 # C编译器的flag
11 CFLAGS        := -Wall -O2 -fno-builtin
12 
13 #导出这些变量到全局,其实就是给子文件夹下面的Makefile使用
14 export CC LD OBJCOPY OBJDUMP AR CPPFLAGS CFLAGS
15 
16 
17 objs := start.o led.o clock.o uart.o main.o
18 objs += lib/libc.a
19 
20 uart.bin: $(objs)
21     $(LD) -Tlink.lds -o uart.elf $^
22     $(OBJCOPY) -O binary uart.elf uart.bin
23     $(OBJDUMP) -D uart.elf > uart_elf.dis
24     gcc mkv210_image.c -o mkx210
25     ./mkx210 uart.bin 210.bin
26 
27 lib/libc.a:
28     cd lib;    make;    cd ..
29     
30 %.o : %.S
31     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c
32 
33 %.o : %.c
34     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c
35 
36 clean:
37     rm *.o *.elf *.bin *.dis mkx210 -f
38     cd lib; make clean; cd ..

(3)编写main函数进行测试

void puts(const char *p);
char *gets(char *p);
void uart_init(void);

void memset(char *p, int val, int length)
{
        int i;

        for(i=0; i)
        {
                p[i]=val;
        }
}

int main(void)
{
        char buf[100] = {0};

        uart_init();

        puts("x210 Simple shell:\n");

        while(1)
        {
                puts("Please input your code:");

                memset(buf, 0, sizeof(buf));

                gets(buf);

                puts("Your input code is:");

                puts(buf);

                puts("\n");

        }

        return 0;
}

 

你可能感兴趣的:(S5PV210_uart stdio移植)