翻译和修改的AVR-gcc3.3的makefile。(用法:make clean /make all)

发布者:火箭少年最新更新时间:2017-01-03 来源: eefocus关键字:翻译  修改  AVR-gcc3.3  makefile 手机看文章 扫描二维码
随时随地手机看文章

#============= MCU选择 ===========================
# MCU name
MCU = atmega8

#============= 输出格式选择 ======================
# Output format. (can be srec, ihex)
FORMAT = ihex

#============= 目标文件名(不带扩展名) ============
# Target file name (without extension).
TARGET = main

#============= 优化级别选择 ======================
# Optimization level (can be 0, 1, 2, 3, s) 
# (Note: 3 is not always the best optimization level. See avr-libc FAQ)
OPT = s

#============= C 源文件列表("\"为换行符号) =======
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c timer.c extdrv.c adc.c sd2k.c mylib.c

#============= ASM 源文件列表 ====================
# List Assembler source files here.
ASRC = 

#============= C编译选项 =========================
# Optional compiler flags.
CFLAGS = -g -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)

#============= 汇编器选项 ========================
# Optional assembler flags.
ASFLAGS = -Wa,-ahlms=$(<:.s=.lst), -gstabs

#============= 连接器选项 ========================
# Optional linker flags.
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref

#============= 附加库选项 ========================
# Additional library flags (-lm = math library).
LIBFLAGS = -lm

#***********************************************************************************
# WinAVR Sample makefile (c) 2002-2003 Eric B. Weddington
# Released to the Public Domain
# Please read the make user manual!
#
# On command line:
# make all = Make software. 编译
# make clean = Clean out built project files. 清除以前编译生成的文件
# make coff = Convert ELF to COFF using objtool. 转换elf文件为cof文件
#
# To rebuild project do make clean then make all. 
#
#***********************************************************************************

#============= 指定目录,如果需要 ================
# Define directories, if needed.
DIRAVR = c:/ele/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib

#============= 定义命令(工具软件名称) ============
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
REMOVE = rm -f
COPY = cp
ELFCOFF = objtool

#============= 一些字符串的定义和数据的取得 =======
HEXSIZE = @avr-size --target=$(FORMAT) $(TARGET).hex
ELFSIZE = @avr-size $(TARGET).elf

FINISH = @echo Errors: none
BEGIN = @echo -------- begin --------
END = @echo --------  end  --------

#============== 指定所有的连接文件 ================
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.s=.o) 

#============== 指定所有的列表文件 ================
# Define all listing files.
LST = $(ASRC:.s=.lst) $(SRC:.c=.lst)

#============== 指定全部.d文件 ====================
# Define all listing files.
ALLD = $(SRC:.c=.d) $(ASRC:.c=.d)

#============== 编译所有可选的和必须的选项标志,增加处理标志 =
# Combine all necessary flags and optional flags. Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
ALL_LDFLAGS = -mmcu=$(MCU) $(LDFLAGS)

#============== 默认的处理(指执行make时,相当于执行make all),真正的编译过程,超级重要,要看懂!!! ==
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep $(TARGET).lss $(TARGET).cof sizeafter finished end
#    开始->gcc版权信息>旧文件大小>编译生成.elf----->生成.hex----->生成.eep----->生成.lss----->生成.cof>新文件大小--->完成>结束

#***********************************************************************************
#============== 待输出的一些编译信息 =============
# Eye candy.
begin:
    $(BEGIN)

finished:
    $(FINISH)

end:
    $(END)

#============== 显示文件的大小信息(先前的和之后的) ==
# Display size of file.
sizebefore:
    @echo Size before:
    -$(HEXSIZE)

sizeafter:
    @echo Size after:
    $(HEXSIZE)

#=============== 显示编译版本信息 ===================
# Display compiler version information.
gccversion : 
    $(CC) --version

#=============== 功能:转换ELF文件为COFF文件,以便在AVR Studio 中仿真/调试。==
# Target: Convert ELF to COFF for use in debugging / simulating in AVR Studio.
coff: $(TARGET).cof end
%.cof: %.elf
    $(ELFCOFF) loadelf $< mapfile $*.map writecof $@

#=============== 从ELF输出文件中生成最终的输出文件(.hex,.eep) ==
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
    $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
    -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
    
#=============== 从ELF输出文件中生成扩充的列表文件(.lss) ==
# Create extended listing file from ELF output file.
%.lss: %.elf
    $(OBJDUMP) -h -S $< > $@

#=============== 连接:从OBJ文件中生成ELF文件(.elf) ==
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
    $(CC) $(ALL_LDFLAGS) $(OBJ) $(LIBFLAGS) --output $@

#=============== 编译:从C源文件中生成OBJ文件(.o) ==
# Compile: create object files from C source files.
%.o : %.c
    $(CC) -c $(ALL_CFLAGS) $< -o $@

#=============== 汇编:从汇编源文件中生成OBJ文件(.o) ==
# Assemble: create object files from assembler source files.
%.o : %.s
    $(CC) -c $(ALL_ASFLAGS) $< -o $@

3=============== 功能:清除上次编译结果 ==
# Target: clean project.
clean: begin clean_list finished end

clean_list :
    $(REMOVE) $(TARGET).hex
    $(REMOVE) $(TARGET).eep
    $(REMOVE) $(TARGET).obj
    $(REMOVE) $(TARGET).cof
    $(REMOVE) $(TARGET).elf
    $(REMOVE) $(TARGET).map
    $(REMOVE) $(TARGET).obj
    $(REMOVE) $(TARGET).a90
    $(REMOVE) $(TARGET).sym
    $(REMOVE) $(TARGET).lnk
    $(REMOVE) $(TARGET).lss
    $(REMOVE) $(TARGET).cof
    $(REMOVE) $(OBJ)
    $(REMOVE) $(LST)
    $(REMOVE) $(ALLD)


#==================================================================
# Automatically generate C source code dependencies. (Code taken from the GNU make user manual.)
# Note that this will work with sh (bash) and sed that is shipped with WinAVR (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#%.d: %.c
#    set -e; $(CC) -MM $(ALL_CFLAGS) $< #    | sed 's/$∗\.o[ :]*/\1.o $@ : /g' > $@; #    [ -s $@ ] || rm -f $@

# Remove the '-' if you want to see the dependency files generated.
#-include $(SRC:.c=.d)

# Listing of phony targets.
#.PHONY : all begin finish end sizebefore sizeafter gccversion coff clean clean_list


原文来自winavr的一个makefile的例子,我做的主要修改之处有:

1、make all 增加了cof文件的生成
2、make clean 删除了*.o等更多文件
3、其它小修改还有..但是我忘了

说明:
make clean :
   用于清除上次变编结果(如果*.h的文件改变,一定要先执行make clean,再执行make all)

make all:
   编译全部(如果只有*,c文件改变,则可以不用执行make clean)


关键字:翻译  修改  AVR-gcc3.3  makefile 引用地址:翻译和修改的AVR-gcc3.3的makefile。(用法:make clean /make all)

上一篇:avr studio 的使用小记——有关cannot find ‘*.elf’ 的问题
下一篇:AVRStudio 6 delay函数错误的解决方法

推荐阅读最新更新时间:2024-03-16 15:28

关于全局变量被修改以及volatile的用法
今天调一个程序的时候发现一个事情,就是全局变量在中断中被改变,代码如下 ..... unsigned char num=0; ..... INTERRUPT() { .... num++; .... } void main() { out(num); } 很不幸的事情是在主函数中,num一直都不会变,编译器avrstdio,外部中断。 调试中发现中断时可以进去的,然而中断出来以后,这个全局变量就被改变了,后来加了volitale就可以了。。 下面说说volatile的具体用法(以下内容都是摘抄): volatile 的字面意思为 不稳定的,易变的 volatile关键字是一种
[单片机]
怎么通过STM32Cube修改型号,所有配置保持不变
第一种方法就是使用cube选择一个新使用的MCU型号,然后使用导入功能导入原来的工程,只要同系列同管脚的,就能把原来的配置完全复制过来,这种方法仅限于同系列。用这样的方法导入的话,原来工程中自己编写的代码不能导入,导入的只是STM32Cube的配置相关。 第二种方法,直接拷贝一个正在使用的工程,包含.ioc文件,我使用Nopad++打开这个.ioc文件,搜索 ZGT ,在文件中能搜索到3个地方是ZGT的,把这个ZGT更换成VET,然后保存。 注意:如果系列不一样,需要把所有的地方都替换掉,比如我是要把ZG改为VE系列,那么只改上面三个地方是不可以,要把所有的ZE改为VE,文件中还有下图的几个地方也需要修改。 修改完后
[单片机]
怎么通过STM32Cube<font color='red'>修改</font>型号,所有配置保持不变
个人修改的用于MDK的2440init.s
;====================================================================================== ; 文件名: 2440INIT.s ; 描述: 1).ARM 指令集, ; 2).小端格式 ; 3).NOR Flash总线16位,大小2MB ; 4).NAND Flash型号:K9F2G08,大小256MB ; 5).GPIO总线32位, ; 更改日期: 2012年1月31日 ;======================================================================================
[单片机]
巧用外设复位修改只读寄存器
有STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC 和TEC 两个字段来体现,CAN硬件会根据错误数据大小做适当响应或处理。 根据寄存器描述得知,TEC 和REC 的值在这个寄存器里面是只读的。而此时的STM32用户有个强烈的需求,就是期望能适时地对这两个出错记录字段做清零。他自己也尝试编写一些代码想让二者清零,均以失败告终,便邮件咨询有无解决办法。 我们在阅读CAN_ESR寄存器内容时倒有个发现,即该寄存器的复位值是0x00000000。 也就是说,芯片每次复位后其值一定是0,
[单片机]
巧用外设复位<font color='red'>修改</font>只读寄存器
硬核测评,Google 翻译被碾压!「细节狂魔」搞定方言、文言
最近,一款在线机器翻译软件在日本大火。 这款翻译软件名叫 DeepL ,大火的原因正是因为它工作太负责了, 翻译得太过准确 ,在日本引起了热议。 从日本网友的民间测评来看,不仅 日语方言 翻译效果杠杠的,连 文言文 也被拿下,要知道,这可是 连 Google 翻译都无法做到 的事。 但是有多精确呢?作为一个严谨的科技软件,当然还是要 用数据来说话 ,DeepL 官方也公开了 日英互译和中英互译的盲测结果 ,如下图所示,可以看出,DeepL 简直就是碾压级的存在嘛: 盲测就是在专业译员评审们不知道哪个翻译版本是由哪个网站翻译的情况下,对翻译文本进行评估,这也一直是 DeepL 的测试方式之一。 DeepL 由于极好
[手机便携]
硬核测评,Google <font color='red'>翻译</font>被碾压!「细节狂魔」搞定方言、文言
u-boot移植(四)---修改前工作:代码流程分析3---代码重定位
一、重定位     1.以前版本的重定位        2.新版本          我们的程序不只涉及一个变量和函数,我们若想访问程序里面的地址,则必须使用SDRAM处的新地址,即我们的程序里面的变量和函数必须修改地址。我们要修改地址,则必须知道程序的地址,就需要在链接的时候加上PIE选项:          加上PIE选项后,链接时候的地址就会生成,然后存储在段里面,如下段(u-boot.lds):          然后我们根据这些地址的信息来修改代码,程序就可以复制到SDRAM的任何地方去。 二、代码流程   start.S中执行到了 bl _main,跳转到_main,_main函数入口在crt0.S (ar
[单片机]
u-boot移植(四)---<font color='red'>修改</font>前工作:代码流程分析3---代码重定位
如何在32个处理器中编辑并且翻译64固定的点进位计算
摘要:介绍嵌式32位CPU在编译器中解决64位运算的方法,并列举一个加法运算的例子,给出可供参考的指令模板。包括32位RISC体系嵌入式CPU层次结构和编译器后端结构。 关键词:RTL 指令模板 编译优化 1 概述 在信息化飞速发展的今天,计算机已成为人们学习和工作不可缺少的工具,我国业已取得了电脑生产大国的地位;但是,作为计算机的核心——CPU的设计与制造,却成了几代计算机工作者的未了习愿,也给国家的安全带来了隐忧。顺应潮流,中芯微系统公司于2001年推出了国内第一颗实用化的32位CPU(方舟一号),主频达到166MHz。下一代方舟CPU将采用0.18μm工艺,超流水结构,主频能达到600MHz以上,在嵌入式CPU领域走
[嵌入式]
苹果修改App Store审核规则 取消打赏抽成
    据国外媒体报道,苹果在近期修改了App Store的审核规则,取消了第三方应用中个人对个人的打赏抽成,今后第三方应用中个人对个人的打赏,苹果不再抽取30%的收入,但同时也规定应用开发商不得从打赏中抽成。   苹果此前规定,将第三方应用中向原创作者的打赏划入“应用内购买”,要求第三方应用要么关闭打赏功能,要么向苹果提供30%的收入分成,这一规定虽在上半年为苹果带来了49亿美元的收入,但也引发了巨大的争议。   苹果的抽成举动显然触动了互联网巨头的利益,腾讯首当其中,旗下的微信已经在iOS版中取消了打赏按钮。识时务者为俊杰,腾讯庞大的用户群是苹果不容忽视的,如今终于做出让步。   此外,针对新发布的iPhone X,苹果出
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved