4001|1

247

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

有朋友用makefile来批处理arm程序的吗 [复制链接]

最近在工作中常常需要用到Makefile来编译和链接arm程序,但是现在我还是无法脱离集成开发环境,希望高手指点指点,

以下是我找到的一个比较经典的make,但是还没有完全将它的意思弄清楚,希望高手指点

 

 

#Makefile文件涉及的语法众多,如果每一个工程都分别写一个makefile文件,既费时又费力,而且写出来的文件不一定正确。此文介绍的是基于RVDS4.0(讨厌的Eclipse)开发软件的可共用的makefile文件,用户不需要了解太多的makefile语法,甚至不需要任何修改就可以进行编译链接。具体的使用方法如下。
#Step 1:把写好的汇编/C程序(不包括cpp程序)copy到新建个src文件夹中;
#Sterp 2:打开makefile文件(使用记事本或者写字板都可以);
#Step 3:在“CPU_FLAG = ARM7TDMI”选择你所使用的ARM核的类型,如,你使用的是ARM920T,那么你就要在改为“CPU_FLAG = ARM920T”;
#Step 4:在“ISA_FLAG = __DEBUG_RAM”中修改你的预定义,如果没有预定义,可不修改此处,相应的如果你在程序中使用了预定义“__DEBUG_FLASH”,那么此处要修改为“ISA_FLAG = __DEBUG_FLASH”;
#Step5:在“OPT_LEVEL = 0”处修改优化等级,0——3共4个等级;
##Step6:在“OPT_TIME_SPACE = time”处修改空间优化还是时间优化,如选择空间优化,可改为“OPT_TIME_SPACE = space”;
#Step7:在“ADDR_ENTRY = 0x40000000”处修改程序的入口地址,如果程序的入口地址是0x00,则此处改为“ADDR_ENTRY = 0x00”;##Step8:在“SCAT = scatter_mem.scat”处选择分散加载文件,如,分散加载文件(必须在src文件夹中)的文件名是scatter.scat,那么此处修改为“SCAT = scatter.scat”;
#Step9:这里是基于ARM指令,使用C和汇编进行编程的一些常用设置,如果想使用THUMB指令或者是使用CPP语言或者是想进一步设置,可在具体的地方加些其他的指令;
#Step10:打开DOS命令进入src文件夹所在的目录,使用make命令可生成映像文件main.axf,使用make bin命令可生成可执行的main.bin文件,使用make
#clean命令可把make生成的文件全部删除;
#Step11:可以在生成的locator.txt文件中查看执行的结果等等。


附:makefile文件

# This is a makefile by Liu Weifeng 2009/08/27

CC=armcc
AS=armasm
LD=armlink
AR=armar
FE=fromelf

SRC_DIR = src
OBJ_DIR = obj
CPU_FLAG = ARM7TDMI
ISA_FLAG = __DEBUG_RAM
DEBUG_FLAG = -g
OPT_LEVEL = 0
OPT_TIME_SPACE = time
ADDR_ENTRY = 0x40000000
SCAT = scatter_mem.scat
CFLAGS = $(DEBUG_FLAG) -Otime -O$(OPT_LEVEL) --cpu $(CPU_FLAG) -D$(ISA_FLAG) $(INCLUDES)
AFLAGS = $(DEBUG_FLAG) --cpu $(CPU_FLAG) #--apcs /interwork
LFLAGS = --list=locator.txt --scatter $(SRC_DIR)/$(SCAT) --entry $(ADDR_ENTRY) --info=sizes --info=totals
AXF_FILE = main.axf
BIN_FILE = main.bin
INCLUDES = -I$(SRC_DIR) #\
   #-I$(SRC_DIR)/arm \ #
   #-I$(SRC_DIR)/arm/lib
CSRC := $(wildcard $(SRC_DIR)/*.c)
ASRC := $(wildcard $(SRC_DIR)/*.s)
OBJ_FILES := $(CSRC(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) $(ASRC(SRC_DIR)/%.s=$(OBJ_DIR)/%.o)
DEP_FILES := $(OBJ_FILES:%=%.d)
ifeq ($(OS),Windows_NT)
RM_FILE = del /q
RM_DIR = rmdir /s /q
MK_DIR = mkdir
else
RM_FILE = /bin/rm -f
RM_DIR = /bin/rm -rf
MK_DIR = /bin/mkdir -p
endif
.phony: all clean bin
all: $(AXF_FILE)
$(AXF_FILE): $(OBJ_DIR) $(OBJ_FILES) $(SRC_DIR)/$(SCAT)
$(LD) $(LFLAGS) --output $@ $(OBJ_FILES)
clean:
- $(RM_DIR) $(OBJ_DIR)
- $(RM_FILE) $(AXF_FILE)
- $(RM_FILE) $(BIN_FILE)
- $(RM_FILE) locator.txt
bin: $(AXF_FILE)
$(FE) --bin $(AXF_FILE) -o $(BIN_FILE)
$(OBJ_DIR):
$(MK_DIR) $(OBJ_DIR)
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c makefile
$(CC) $(CFLAGS) -c [email=--depend=$@.d]--depend=$@.d[/email] --depend_format=unix_escaped --no_depend_system_headers -o $@ $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.s makefile
$(AS) $(AFLAGS) [email=--depend=$@.d]--depend=$@.d[/email] --depend_format=unix_escaped -o $@ $<
-include $(DEP_FILES)
 

此帖出自单片机论坛

最新回复

我一直想用VS2010的开发环境加MAKEFILE来开发软件,那绝对爽,但是还有些问题没有解决,缺资料,有空再试试  详情 回复 发表于 2010-9-25 10:14
点赞 关注
 

回复
举报

2641

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
我一直想用VS2010的开发环境加MAKEFILE来开发软件,那绝对爽,但是还有些问题没有解决,缺资料,有空再试试
此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表