搜索
bottom↓
回复: 11

请教,avrstudio4.12怎么输出cof文件,用网上提供的方法都试过了,帮帮我!!

[复制链接]

出0入0汤圆

发表于 2006-3-11 17:31:34 | 显示全部楼层 |阅读模式
我用AVR-GCC,按  archeng504 阿成  提供的makefile格式,改了我的makefile,build时输出了

Build started 11.3.2006 at 17:29:28

Makefile:46: *** missing separator.  Stop.

Build failed with 1 errors and 0 warnings...

的错误提示





我改的makefile 文件如下:

###############################################################################

# Makefile for the project test1

###############################################################################



## General Flags

PROJECT = test1

MCU = atmega8

TARGET = test1.elf

CC = avr-gcc.exe



## Options common to compile, link and assembly rules

COMMON = -mmcu=$(MCU)



## Compile options common for all C compilation units.

CFLAGS = $(COMMON)

CFLAGS += -Wall -gstabs  -O0 -fsigned-char

CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d



## Assembly specific flags

ASMFLAGS = $(COMMON)

ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2



## Linker flags

LDFLAGS = $(COMMON)

LDFLAGS +=





## Intel Hex file production flags

HEX_FLASH_FLAGS = -R .eeprom



HEX_EEPROM_FLAGS = -j .eeprom

HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"

HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0





## Objects that must be built in order to link

OBJECTS = test1.o



## Objects explicitly added by the user

LINKONLYOBJECTS =



## Build

all: $(TARGET) test1.hex test1.eep test1.coff



COFFCONVERT= avr-objcopy --debugging \      

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

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

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

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



coff: $(PROJECT).elf

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





## Compile

test1.o: ../test1.c

        $(CC) $(INCLUDES) $(CFLAGS) -c  $<



##Link

$(TARGET): $(OBJECTS)

         $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)



%.hex: $(TARGET)

        avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@



%.eep: $(TARGET)

        avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@



%.lss: $(TARGET)

        avr-objdump -h -S $< > $@



size: ${TARGET}

   @echo

   @sh avr-mem.sh ${TARGET} ${MCU}



## Clean target

.PHONY: clean

clean:

        -rm -rf $(OBJECTS) test1.elf test1.cof dep/* test1.hex test1.eep



## Other dependencies

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

出0入0汤圆

 楼主| 发表于 2006-3-11 17:32:56 | 显示全部楼层
另:可不可以直接利用avrstuio 自己直接生成可输出cof文件的makefile呢??

出0入0汤圆

发表于 2006-3-11 19:31:46 | 显示全部楼层
要用外部的makefile文件,可以直接用winavr自带的工具修改

用外部makefile文件时要注意:

1.工程文件和目标文件(main函数所在的源文件)同名

2.makefile和目标文件放在同一个目录

3.如果头文件和C文件不在同一目录,需要在makefile中设置

出0入0汤圆

发表于 2006-3-11 21:30:04 | 显示全部楼层
这一行错了

all: $(TARGET) test1.hex test1.eep test1.coff

应为

all: $(TARGET) test1.hex test1.eep coff

出0入0汤圆

发表于 2006-3-11 23:51:34 | 显示全部楼层
winavr自带的工具修改的makefile文件,我觉的不适合在avrstuio中用!这个makefile文件要求跟程序文件放在同一个目录,编译时产生的文件都放在这个目录下,这样使到这个目录乱乱的。所以,我建议在avrstuio生成的makefile文件的基础上进行修改!!我编了一个makefile文件生成工具(不太好用),给你看下界面



他的功能很少,主要增加了C++功能

出0入0汤圆

 楼主| 发表于 2006-3-13 08:10:50 | 显示全部楼层
archeng504 阿成,你好,我也认为在avrstudio4.12中用winavr生成的makefile不好,你这个生成makefile的软件在这有下吗???

出0入0汤圆

 楼主| 发表于 2006-3-13 08:21:32 | 显示全部楼层
###############################################################################

# Makefile for the project test1

###############################################################################



## General Flags

PROJECT = test1

MCU = atmega8

TARGET = test1.elf

CC = avr-gcc.exe



## Options common to compile, link and assembly rules

COMMON = -mmcu=$(MCU)



## Compile options common for all C compilation units.

CFLAGS = $(COMMON)

CFLAGS += -Wall -gstabs -O0 -fsigned-char

CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d



## Assembly specific flags

ASMFLAGS = $(COMMON)

ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2



## Linker flags

LDFLAGS = $(COMMON)

LDFLAGS +=





## Intel Hex file production flags

HEX_FLASH_FLAGS = -R .eeprom



HEX_EEPROM_FLAGS = -j .eeprom

HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"

HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0





## Objects that must be built in order to link

OBJECTS = test1.o



## Objects explicitly added by the user

LINKONLYOBJECTS =



## Build

all: $(TARGET) test1.hex test1.eep coff size



COFFCONVERT= avr-objcopy --debugging \      

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

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

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

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



coff: $(PROJECT).elf

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





## Compile

test1.o: ../test1.c

        $(CC) $(INCLUDES) $(CFLAGS) -c  $<



##Link

$(TARGET): $(OBJECTS)

         $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)



%.hex: $(TARGET)

        avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@



%.eep: $(TARGET)

        avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@



%.lss: $(TARGET)

        avr-objdump -h -S $< > $@



size: ${TARGET}

   @echo

   @sh avr-mem.sh ${TARGET} ${MCU}





## Clean target

.PHONY: clean

clean:

        -rm -rf $(OBJECTS) $(TARGET) $(PROJECT).cof dep/* test1.hex test1.eep



## Other dependencies

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







我又改了,但还是出现了

Build started 13.3.2006 at 08:19:19

Makefile:46: *** missing separator.  Stop.

Build failed with 1 errors and 0 warnings...

的错误,救救我吧

出0入0汤圆

发表于 2006-3-13 10:41:00 | 显示全部楼层
我分析过,这个makefile应该没有语法错误,可能是在网页中copy时把中文字符的空格也copy进去了!!

我贴一个Makefile上来,

点击此处下载 Makefile.rar

我那个软件还没有放上来,正在改进中。




-----此内容被archeng504于2006-03-13,10:50:28编辑过

出0入0汤圆

 楼主| 发表于 2006-3-13 11:38:01 | 显示全部楼层
我应该怎么改呀,我改了后,又出现新的错误了,

gcc plug-in: Error: Object file not found on expected location D:\WinAVR\my-work\pwm\pwm\pwm.elf

Make sure your makefile specifies the output .elf file as pwm.elf

你的MAKEFILE文件有修改依据吗,是根据什么修改的,有具体的修改方法吗?

出0入0汤圆

 楼主| 发表于 2006-3-13 11:51:43 | 显示全部楼层
我再改就出现这个了

gcc plug-in: Error: Object file not found on expected location D:\WinAVR\my-work\pwm\pwm.elf

出0入0汤圆

 楼主| 发表于 2006-3-13 11:54:54 | 显示全部楼层
Build started 13.3.2006 at 11:53:21

make: *** No rule to make target `../pwm.c', needed by `pwm.o'.  Stop.

Build failed with 1 errors and 0 warnings...

出0入0汤圆

发表于 2006-3-13 12:59:34 | 显示全部楼层
环境:winavr20060125 + avrstudio4.12.462(sp1)  

步骤:

1.先用avrstudio生成内部makefile.

2.修改这个makefile,修改内容:

  1.找到这行

CFLAGS += -Wall -gdwarf-2 -DF_CPU=8000000UL  -O0 -fsigned-char

将其中的-gdwarf-2改为-gstabs,其他不变

修改后:CFLAGS += -Wall -gstabs -DF_CPU=8000000UL  -O0 -fsigned-char

  2.找到这行

all: $(TARGET) lcd1602_8bit.hex lcd1602_8bit.eep size

添加coff转换过程,在size前添加coff

修改后为:all: $(TARGET) lcd1602_8bit.hex lcd1602_8bit.eep coff size

再在这一行后添加coff转换的实现代码:

COFFCONVERT= avr-objcopy --debugging \

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

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

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

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



coff: $(PROJECT).elf

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

  3.找到这一行

        -rm -rf $(OBJECTS) t1captrue.elf dep/* t1captrue.hex t1captrue.eep

添加$(PROJECT).cof,目的是当执行清除命令时能把生成的.cof文件也删除。

修改后:-rm -rf $(OBJECTS) t1captrue.elf dep/* t1captrue.hex t1captrue.eep $(PROJECT).cof

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

本版积分规则

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

GMT+8, 2024-5-1 21:34

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

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