uart_stdio实验

目的:在串口0上实现printf、scanf等函数,它使用scanf、sscanf、printf等函数从串口接收一个十进制数字序列,然后将它转化为十六进制输出。

大致内容和uart实验类似,这里只分析两个文件。

stdio.lds

SECTIONS {
    . = 0x00000000;
    .init : AT(0){ head.o init.o nand.o}
/*将上面文件对应的运行地址设为0,加载地址(存在NAND Flash上的地址)设为0.
从NAND Flash启动时,这些代码被复制到Steppingstone后就可以直接运行*/
    . = 0x30000000;
    .text : AT(4096) { *(.text) }/*加载地址设为4096*/
    .rodata ALIGN(4) : AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03)) {*(.rodata*)} 
    .data ALIGN(4)   : AT((LOADADDR(.rodata)+SIZEOF(.rodata)+3)&~(0x03)) { *(.data) }
/*因为前面使用 ALIGN(4)使得运行地址为4字节对齐,所以后面各段之间的加载地址相对偏移值应该等于
运行地址的相对偏移值,需要将AT(...)中的值也设为4字节对齐:先加上3,然后&~(0x03),(将低2位设为0)*/
    __bss_start = .;
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
    __bss_end = .;
}

Makefile

CC      = arm-linux-gcc
LD      = arm-linux-ld
AR      = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump

INCLUDEDIR  := $(shell pwd)/include #打印本文件夹路径赋值给 INCDIR
CFLAGS      := -Wall -O2    #-Wall:打开警告信息 -O2:2级优化(常用)
CPPFLAGS    := -nostdinc -I$(INCLUDEDIR) #-nostdinc:不在标准系统目录中搜索头文件,只在-I指定的目录中搜索

export  CC LD OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS #导出这些变量到全局,其实就是给子文件夹下面的Makefile使用 

objs := head.o init.o nand.o serial.o main.o lib/libc.a #lib/libc.a 在子makefile中生成的目标 

stdio.bin: $(objs)
    ${LD} -Tstdio.lds -o stdio_elf $^
    ${OBJCOPY} -O binary -S stdio_elf $@
    ${OBJDUMP} -D -m arm stdio_elf > stdio.dis

.PHONY : lib/libc.a
#.PHONY是一个伪目标,可以防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突,另一种是提高执行makefile时的效率。
lib/libc.a:
    cd lib; make; cd ..
#切换到lib文件夹,执行make指令,然后返回到上一级目录。

%.o:%.c
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

%.o:%.S
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

clean:
    make  clean -C lib
    rm -f stdio.bin stdio_elf stdio.dis *.o

[剩余文件点我下载]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种瓜大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值