搜索
bottom↓
回复: 10

winavr 的mfile不完全注释

[复制链接]

出0入0汤圆

发表于 2006-3-4 21:58:39 | 显示全部楼层 |阅读模式
MCU = atmega128

#型号



F_CPU = 8000000

#频率



FORMAT = ihex

#目标文件的格式



TARGET = main

#目标文件



SRC = $(TARGET).c

#C源文件



ASRC =

#ASM源文件



OPT = s

#优化等级



DEBUG = dwarf-2

#调试格式



EXTRAINCDIRS =

#其他目录



CSTANDARD = -std=gnu99

#C标准



CDEFS = -DF_CPU=$(F_CPU)UL

#编译定义



# Place -I options here

CINCS =

#其它C文件





#---------------- Compiler Options 编译选项 ----------------

CFLAGS = -g$(DEBUG)

#调试格式



CFLAGS += $(CDEFS) $(CINCS)

#基本定义和目录



CFLAGS += -O$(OPT)

#优化等级



CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums

#字段选项



CFLAGS += -Wall -Wstrict-prototypes

#警告等级



CFLAGS += -Wa,-adhlns=$(<:.c=.lst)

#汇编选项



CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))

#其他目录

CFLAGS += $(CSTANDARD)

#C标准



#---------------- Assembler Options 汇编选项----------------

ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs

#生成列表文件,使用调试格式

#-a[cdhlmns=file]

#生成汇编列表.子选项:

#c 忽略错误条件

#d 忽略调试指令

#h 包括高等语言(C语言)

#l 包括汇编语言

#m 包括宏扩展

#n 忽略类型预处理

#s 包括符号

#=file 列表文件名



#---------------- Library Options 库选项----------------

PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min



# Floating point printf version (requires MATH_LIB = -lm below)

PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt



PRINTF_LIB =

#PRINTF_LIB = $(PRINTF_LIB_MIN)

#PRINTF_LIB = $(PRINTF_LIB_FLOAT)





# Minimalistic scanf version

SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min



# Floating point + %[ scanf version (requires MATH_LIB = -lm below)

SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt



# If this is left blank, then it will use the Standard scanf version.

SCANF_LIB =

#SCANF_LIB = $(SCANF_LIB_MIN)

#SCANF_LIB = $(SCANF_LIB_FLOAT)



       

MATH_LIB = -lm

#使用数学函数库





#---------------- External Memory Options 扩展内存选项----------------



EXTMEMOPTS =







#---------------- Linker Options 连接选项----------------

LDFLAGS = -Wl,-Map=$(TARGET).map,--cref

#用交叉索引生成影射文件



LDFLAGS += $(EXTMEMOPTS)

#扩展内存选项



LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)

#标准输出,标准输入,数学的库选项





#---------------- Programming Options (avrdude) 编程选项(AVRDUDE) ----------------



AVRDUDE_PROGRAMMER = stk500

#编程器



AVRDUDE_PORT = com1    # programmer connected to serial device

#端口



AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex

#FLASH文件



AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)

#AVRDUDE选项,型号,端口,编程器



AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)

#校验选项



AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)

#



AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)

#擦除计数器





#---------------- Debugging Options 调试选项 ----------------



DEBUG_MFREQ = $(F_CPU)

#频率



DEBUG_UI = insight

#界面



DEBUG_BACKEND = avarice

#后台



GDBINIT_FILE = __avr_gdbinit

#GDB初始文件



JTAG_DEV = /dev/com1

#JTAG设备



DEBUG_PORT = 4242

#端口



DEBUG_HOST = localhost

#主机





#============================================================================





# Define programs and commands.

SHELL = sh

#SHELL



CC = avr-gcc

#编译器



OBJCOPY = avr-objcopy

#转换OBJ文件



OBJDUMP = avr-objdump

#显示OBJ文件的内容



SIZE = avr-size

#显示文件大小



NM = avr-nm

#显示OBJ文件中的符号



AVRDUDE = avrdude

#



REMOVE = rm -f

#删除文件



COPY = cp

#复制文件



WINSHELL = cmd

#命令行



# Define Messages

MSG_ERRORS_NONE = Errors: none

MSG_BEGIN = -------- begin --------

MSG_END = --------  end  --------

MSG_SIZE_BEFORE = Size before:

MSG_SIZE_AFTER = Size after:

MSG_COFF = Converting to AVR COFF:

MSG_EXTENDED_COFF = Converting to AVR Extended COFF:

MSG_FLASH = Creating load file for Flash:

MSG_EEPROM = Creating load file for EEPROM:

MSG_EXTENDED_LISTING = Creating Extended Listing:

MSG_SYMBOL_TABLE = Creating Symbol Table:

MSG_LINKING = Linking:

MSG_COMPILING = Compiling:

MSG_ASSEMBLING = Assembling:

MSG_CLEANING = Cleaning project:









# Define all object files.

OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

#定义所有的目标文件



# Define all listing files.

LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)

#定义所有的列表文件



# Compiler flags to generate dependency files.

GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d

#编译选项生成依赖文件

#-M                        生成依赖

# -MD                     生成依赖并编译   

#  -MF <file>           生成依赖文件

#  -MG                    将丢失的头文件当作已生成的文件

#  -MM                    同-M但忽略系统头文件

#  -MMD                  同-MD但忽略系统文件

#  -MP                    将所有头文件当作假目标

#  -MQ <target>     引用目标开始

#  -MT <target>     引用目标结束

  

# Combine all necessary flags and optional flags.

# Add target processor to flags.

ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)

ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)

#加入型号和一般选项









# Default target.

all: begin gccversion sizebefore build sizeafter end



build: elf hex eep lss sym



elf: $(TARGET).elf

hex: $(TARGET).hex

eep: $(TARGET).eep

lss: $(TARGET).lss

sym: $(TARGET).sym







# the following magic strings to be generated by the compile job.

begin:

        @echo

        @echo $(MSG_BEGIN)



end:

        @echo $(MSG_END)

        @echo





# Display size of file.

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex

#HEX文件的大小



ELFSIZE = $(SIZE) -A $(TARGET).elf

#ELF文件大小



AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)

#AVR内存



sizebefore:

        @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \

        $(AVRMEM) 2>/dev/null; echo; fi



sizeafter:

        @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \

        $(AVRMEM) 2>/dev/null; echo; fi







# Display compiler version information.

gccversion :

        @$(CC) --version

#版本信息





# Program the device.  

program: $(TARGET).hex $(TARGET).eep

        $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)

#编程



gdb-config:

        @$(REMOVE) $(GDBINIT_FILE)

        @echo define reset >> $(GDBINIT_FILE)

        @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)

        @echo end >> $(GDBINIT_FILE)

        @echo file $(TARGET).elf >> $(GDBINIT_FILE)

        @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)

ifeq ($(DEBUG_BACKEND),simulavr)

        @echo load  >> $(GDBINIT_FILE)

endif       

        @echo break main >> $(GDBINIT_FILE)

       

debug: gdb-config $(TARGET).elf

ifeq ($(DEBUG_BACKEND), avarice)

        @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.

        @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \

        $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)

        @$(WINSHELL) /c pause

       

else

        @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \

        $(DEBUG_MFREQ) --port $(DEBUG_PORT)

endif

        @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)

       







# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.

COFFCONVERT=$(OBJCOPY) --debugging \

--change-section-address .data-0x800000 \

--change-section-address .bss-0x800000 \

--change-section-address .noinit-0x800000 \

--change-section-address .eeprom-0x810000

#由ELF转换成COFF文件,此处定义四个段位的起点



coff: $(TARGET).elf

        @echo

        @echo $(MSG_COFF) $(TARGET).cof

        $(COFFCONVERT) -O coff-avr $< $(TARGET).cof

#由ELF文件生成COFF文件



extcoff: $(TARGET).elf

        @echo

        @echo $(MSG_EXTENDED_COFF) $(TARGET).cof

        $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

#由ELF文件生成EXTCFF文件





# Create final output files (.hex, .eep) from ELF output file.

%.hex: %.elf

        @echo

        @echo $(MSG_FLASH) $@

        $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

#由ELF生成HEX文件



%.eep: %.elf

        @echo

        @echo $(MSG_EEPROM) $@

        -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \

        --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

#由ELF文件生成EEP文件



# Create extended listing file from ELF output file.

%.lss: %.elf

        @echo

        @echo $(MSG_EXTENDED_LISTING) $@

        $(OBJDUMP) -h -S $< > $@

#由ELF文件生成扩展列表文件



# Create a symbol table from ELF output file.

%.sym: %.elf

        @echo

        @echo $(MSG_SYMBOL_TABLE) $@

        $(NM) -n $< > $@

#由ELF生成符号列表





# Link: create ELF output file from object files.

.SECONDARY : $(TARGET).elf

.PRECIOUS : $(OBJ)

%.elf: $(OBJ)

        @echo

        @echo $(MSG_LINKING) $@

        $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)

#连接生成ELF文件



# Compile: create object files from C source files.

%.o : %.c

        @echo

        @echo $(MSG_COMPILING) $<

        $(CC) -c $(ALL_CFLAGS) $< -o $@

#由C文件编译OBJ文件



# Compile: create assembler files from C source files.

%.s : %.c

        $(CC) -S $(ALL_CFLAGS) $< -o $@

#由C文件编译ASM文件



# Assemble: create object files from assembler source files.

%.o : %.S

        @echo

        @echo $(MSG_ASSEMBLING) $<

        $(CC) -c $(ALL_ASFLAGS) $< -o $@

#由ASM文件编译OBJ文件



# Create preprocessed source for use in sending a bug report.

%.i : %.c

        $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@

#生成预处理文件以便报错



# Target: clean project.

clean: begin clean_list end



clean_list :

        @echo

        @echo $(MSG_CLEANING)

        $(REMOVE) $(TARGET).hex

        $(REMOVE) $(TARGET).eep

        $(REMOVE) $(TARGET).cof

        $(REMOVE) $(TARGET).elf

        $(REMOVE) $(TARGET).map

        $(REMOVE) $(TARGET).sym

        $(REMOVE) $(TARGET).lss

        $(REMOVE) $(OBJ)

        $(REMOVE) $(LST)

        $(REMOVE) $(SRC:.c=.s)

        $(REMOVE) $(SRC:.c=.d)

        $(REMOVE) .dep/*







# Include the dependency files.

-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)

#依赖文件



# Listing of phony targets.

.PHONY : all begin finish end sizebefore sizeafter gccversion \

build elf hex eep lss sym coff extcoff \

clean clean_list program debug gdb-config

出0入0汤圆

发表于 2006-3-5 15:10:00 | 显示全部楼层
强人呀

出0入0汤圆

 楼主| 发表于 2006-3-10 22:15:53 | 显示全部楼层
原来我班门弄斧了!:-)

出0入0汤圆

发表于 2006-5-4 02:53:01 | 显示全部楼层
从来没试过给别人穿裤子...夜晚试试~~~

出0入0汤圆

发表于 2006-5-4 02:53:59 | 显示全部楼层
哈哈~~~好玩~~~终于成功了~~~爽~~~

出0入0汤圆

发表于 2006-5-4 11:59:20 | 显示全部楼层
哈哈..

出0入0汤圆

发表于 2006-5-5 02:20:06 | 显示全部楼层
哈哈...第一次盖红章子的感觉----真好呀(现在网语称爽~~~)



连我姑娘和同事也笑话我说---晕~~~(说我很新潮,尽说网语)



说我整天"忽悠"他们~~~

出0入0汤圆

发表于 2006-5-5 02:23:35 | 显示全部楼层
我在网上也找了一个<<跟我一起写MakeFile>>



点击此处打开跟我一起写MakeFile.pdf

出0入0汤圆

发表于 2006-5-6 08:14:08 | 显示全部楼层
makefie 详解。





http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=614387&bbs_page_no=1&bbs_id=1000

出0入0汤圆

发表于 2006-5-13 09:42:49 | 显示全部楼层
“从来没试过给别人穿裤子...夜晚试试~~~ ”



版主现在才有空帮人穿裤子呀?你也够忙的,这帖子发了很久了。



谢谢分享!!

出0入0汤圆

发表于 2006-12-27 12:40:40 | 显示全部楼层
把酷帖顶起!把酷帖顶齐!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 15:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表