• 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相关的代码;

    (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<length; i++)
            {
                    p[i]=val;
            }
    }
    
    int main(void)
    {
            char buf[100] = {0};
    
            uart_init();
    
            puts("x210 Simple shell:
    ");
    
            while(1)
            {
                    puts("Please input your code:");
    
                    memset(buf, 0, sizeof(buf));
    
                    gets(buf);
    
                    puts("Your input code is:");
    
                    puts(buf);
    
                    puts("
    ");
    
            }
    
            return 0;
    }
  • 相关阅读:
    冲刺阶段(三)
    冲刺阶段(二)
    第十一周学习进度
    冲刺阶段(一)
    第十一周学习进度条
    第一阶段——站立会议总结DAY04
    第一阶段——站立会议总结DAY03
    第一阶段——站立会议总结DAY02
    第一阶段——站立会议总结DAY01
    第十周学习进度条
  • 原文地址:https://www.cnblogs.com/CYP01/p/5887193.html
Copyright © 2020-2023  润新知