首先在windows下安装make工具,并建立好ADS工程。
编译命令make -f ads.mk,执行过程请看截图http://hi.youkuaiyun.com/space-2513952-do-album-picid-507759.html
MYPATH = C:/boot/44b_flash
PAT = D:/Program Files/ARM/ADSv1_2/Bin
MYLDPATH = D:/arm7/lib
CC = $(PAT)/armcc
LD = $(PAT)/armlink
OBJTOOL = $(PAT)/fromelf
RM = del -f
#AS = $(PAT)/armasm -keep -g
AS = $(PAT)/armasm -keep -g
ASFILE = $(MYPATH)/SRC/44BINIT.S
CFLAGS = -O1 -g+ -Wa -DNO_UNDERSCORES=1 -I../inc
MODEL = test
#SRC = 29lv160.c 44BLIB.C 44BMAIN.C
SRC =$(wildcard *.c)
#OBJS = 29lv160.o 44BLIB.o 44BMAIN.o
DIR = $(notdir $(SRC))
OBJS_TMP = $(patsubst %.c, %.o, $(DIR)) 这里只是把.c转为.o,但.C未被转为.o
OBJS = $(patsubst %.C, %.o, $(OBJS_TMP )) 完成将.C转为.o
all:$(MODEL).axf $(MODEL).bin clean
$(MODEL).axf:$(OBJS) 44BINIT.o
@echo "### Linking ..."
$(LD) $(OBJS) 44BINIT.o -ro-base 0xc000000 -first 44BINIT.o(Init) -o $@ -libpath $(MYLDPATH)
# $(LD) $(OBJS) 44BINIT.o -info totals -ro-base 0xc000000 -first 44BINIT.o(Init) -o $@ -libpath $(MYLDPATH)
# $(LD) $(OBJS) 44BINIT.o -ro-base 0xc000000 -entry Main -first 44BINIT.o -o $@ -libpath $(MYLDPATH)
$(MODEL).bin: $(MODEL).axf
$(OBJTOOL) -c -bin -output $@ $<
$(OBJTOOL) -c -s -o $(<:.axf=.lst) $< 这句的意思是fromelf -c -s -o test.lst test.axf
%.o:%.c
@echo "### Compiling $<"
$(CC) $(CFLAGS) -c $< -o $@
%.o:%.s
@echo "### Compiling $<"
$(AS) $< -o $@
# $(CC) -g -c $@ $<
clean:
$(RM) 44BINIT.o $(OBJS)
test:
@echo "### Just a test ###"
@echo $(SRC)
@echo "#######"
@echo $(OBJS)
编译过程中遇到的问题及解决方案:
L6211E: Ambiguous section selection. Object <objname> contains more than one section.
This can occur when using the linker option -keep on an assembler object that contains more than
one AREA. The linker needs to know which AREA you would like to keep.
To solve this, specify the names of the AREAs that you wish to keep, using more than one -keep
option, for example: -keep boot.o(vectors) -keep boot.o(resethandler)…
Note that using assembler files with more than one AREA may give other problems elsewhere, so
this is best avoided.
附录:使用AXD中遇到的常用问题
1.DBT Warning 00135: Cannot set breakpoints in literal pools
原因:-ro-base无效。
2.串口显示乱码问题
原来是在44BINIT.S中,一些底层参数设定有问题,至于是那些还不清楚,先把.inc文件贴出来:
; *******************************************************
GET ../include/option.inc <---------- GET ../include/option.s
GET ../include/memcfg.inc <---------- GET ../include/memcfg.s
;Memory Area
;GCS6 64M 16bit(8MB) DRAM/SDRAM(0xc000000-0xc7fffff)
;APP RAM=0xc000000~0xc7effff
;44BMON RAM=0xc7f0000-0xc7fffff
;STACK =0xc7ffa00
option.inc
;**********OPTIONS*******************************
_RAM_STARTADDRESS EQU 0xc000000
;_ISR_STARTADDRESS EQU 0xc7fff00 ;GCS6:64M DRAM/SDRAM
_ISR_STARTADDRESS EQU 0xc1fff00 ;GCS6:16M DRAM
;BUSWIDTH; 16,32
GBLA BUSWIDTH
BUSWIDTH SETA 16
;"DRAM","SDRAM"
GBLS BDRAMTYPE
BDRAMTYPE SETS "SDRAM"
;This value has to be TRUE on ROM program.
;This value has to be FALSE in RAM program.
GBLL PLLONSTART
PLLONSTART SETL {TRUE}
&
ADS1.2+GNUWinMake在Windows下编译ARM工程实践

本文详细介绍了如何在Windows环境下使用ADS1.2和GNU Make编译ARM测试工程。首先安装必要的工具,然后配置ADS工程,通过make -f ads.mk命令进行编译。在编译过程中遇到如Ambiguous section selection错误,解决办法是明确指定要保留的AREA。此外,还提供了相关配置文件的内容,包括option.inc和memcfg.inc,用于设置内存控制参数。
最低0.47元/天 解锁文章
1万+





