完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近写裸机的程序,移植stdio到裸机遇到的问题。
描述:复制了1期代码的lib和include文件夹,以及Makefile文件,在Makefile的基础上做了修改。又实现了串口的putc和getc函数 遇到的问题1:编译出来的二进制文件过大(700多M),修改连接器脚本文件,加入rodata段的描述之后编译出来的文件约8k 遇到的问题2:不能调用printf和scanf函数,一旦调用之后程序就死掉。但是可以sprintf函数正确,并且实验之后的现象正常。 用的编译环境是老师提供的ubuntu9,编译器是ARM-linux-gcc3 |
|
相关推荐
4个回答
|
|
新人不知道在那儿上传代码压缩包和实验截图
|
|
|
|
int main(void)
{ char buff[100]; /* 点亮LED */ GPFCON &= ~(GPF4_MSK | GPF5_MSK | GPF6_MSK); GPFCON |= (GPF4_OUT | GPF5_OUT | GPF6_OUT); printf("jiangsunr"); //使用串口uart_putc函数追踪,出错 //sprintf(buff, "uart_putsnr"); //uart_puts(buff); //测试正常 while(1) { uart_putc(uart_getc()); } return 0; } |
|
|
|
连接器脚本:
ENTRY(_start) SECTIONS { . = 0x30000000; . = ALIGN(4); .text : { start.o (.text) *(.text) } . = ALIGN(4); .data : { *(.rodata*) *(.data) } . = ALIGN(4); .bss : { *(.bss) } } |
|
|
|
顶层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 CFLAGS := -Wall -O2 CPPFLAGS := -nostdinc -I$(INCLUDEDIR) export CC LD AR OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS objs := start.o main.o init.o uart.o nand.o lib/libc.a lcd.bin: $(objs) ${LD} -Tnand.lds -o lcd_elf $^ ${OBJCOPY} -O binary -S lcd_elf $@ ${OBJDUMP} -D -m arm lcd_elf > lcd.dis .PHONY : lib/libc.a lib/libc.a: cd lib; make; cd .. %.o:%.c ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< %.o:%.S ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< clean: make clean -C lib rm -f lcd.bin lcd_elf lcd.dis *.o |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2184 浏览 6 评论
1985 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4543 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 19:15 , Processed in 0.663116 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号