IAR AVR怎么生成HEX文件啊.
我用的是IAR AVR3.20版本。网络上大多介绍的是2.23版本。现在只能生成d90文件。而这个文件在AVR STDIO中又不认。又不能写入芯片。要怎么设置才能生成INTEL HEX文件?在编译过程序中出现以下提示:
Error: The output format intel-standard cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is wanted
这是什么意思?(我已在XLINK中选择FORMAT-OTHER-INTEL STANDARD) http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=318743&bbs_page_no=1&sub_kind_id=1130&bbs_id=1000 project->option->linker->Extra Options->Use command line options
-y(CODE)
-Ointel-extended,(DATA)=$PROJ_FNAME$_data.hex
-Ointel-extended,(XDATA)=$PROJ_FNAME$_eeprom.hex 谢谢楼上的两位,现已成功解决。 我还想问一下,在IAR AVR中如何生成能在STDIO中调试的文件。我试过生成了D90,DBG文件,结果STDIO都不能,提示格式错误。 我按照testcode和korren的设置,生成的HEX文件灌到MEGA16内运行不正常,但同样的程序用ICC编译后的HEX文件灌到MEGA16内运行正常。请问为什么会这样的呢?我用的是IAR4.12A版 会有这样的事吗?
不会吧,我现在正在用这个软件. 有这样的事,按照korren的办法,生成IAR_test_data.hex和IAR_test_eeprom.hex,不运行... 我这样解决了:
如上生成的eeprom文件可以用,只是*_data.hex不能用,代之以默认的*.a90文件,但格式要改:Options...→Linker→Output→Format→Other→Output选择intel-extended
这是为什么? 我是安装你们说的选了,还是有错误。
http://cache.amobbs.com/bbs_upload782111/files_large/armok01139017.JPG
出现的提示是:
http://cache.amobbs.com/bbs_upload782111/files_large/armok01139018.JPG 请求支持,不胜感激,很急!谢谢 iar编译的程序不能运行基本上是自己写代码的问题吧.我一直都是编译的最小size,都没问题啊,你在看看工程设置的cstack,rstack大小. 为什么我这样设置生存的.hex文件,用ISPlay装入文件时会出现文件转换失败的提示 我用的是 IAR 3.20A 版的,我是直接生成.d90文件,然后在studio里面直接 open .d90文件,用了2年了,一直没有出现过上述的问题。
http://cache.amobbs.com/bbs_upload782111/files_6/armok01139153.jpg 我生存的.hex文件用ISPlay装入时怎么提示文件大于64K,文件转换失败的提示 .A90的文件其实就是HEX文件,扩展名不同而已 我以上的方法都试过了,是可以生成相应的文件类型,但.hex和.a90下载到芯片时,芯片都不能运行,请问各位是怎么解决烧录问题的??谢谢。。 难道只是我生成的文件不能烧录,大家的都可以正常运行吗?
是软件没设好,还是没有破解好? IAR同时输出多个文件的说明,在IAR225E(30天限时版)中通过。
操作步骤:
1、在Project->Options->XLINK->Include中观察该Project使用了哪个XCL文件。
2、在该XLC文件中加入以下两行:
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep
3、在Project->Options->XLINK->Output->Format->Other中选择UBROF6格式输出。
以下为MAP文件的部分内容,生成了与Project名称相同的三个文件:
test.dbg:兼容于AVR STUDIO的调试文件(也可以任意指定文件名)
test.hex:INTEL HEX格式的程序代码文件
test.eep:INTEL HEX格式的EEPROM初始化数据文件。
################################################################################
# #
# IAR Universal Linker V4.53F/WIN #
# #
# Link time =20/Jan/200114:49:35 #
# Target CPU =A90 #
# List file ="D:\IAR Systems\user_Avr\Debug\List\test.map" #
# Output file 1 ="D:\IAR Systems\user_Avr\Debug\Exe\test.dbg" #
# Format: ubrof6 #
# UBROF version 6.0.0 #
# Output file 2 ="D:\IAR Systems\user_Avr\Debug\Exe\test.hex" #
# Format: intel-extended, variant: -y(CODE) #
# Output file 3 ="D:\IAR Systems\user_Avr\Debug\Exe\test.eep" #
# Format: intel-extended, variant: -y(XDATA) #
注意:1、可以修改IAR Embedded Workbench安装位置中所有cfg?s.xcl cfg?l.xcl cfg?t.xcl文件,
这样就不需每次修改了,对Project->Options->XLINK->Output->Format中其余两个选项没有影响。
2、如果不能生成这三个文件,请检查XLINK的版本,可以到www.iar.com下载4.53F版的XLINK程序。
3、本说明是针对可以生成INTEL HEX格式文件的版本而言,对DEMO版无效。
4、通过MAP文件可以看到编译器使用...\AVR\src\template路径下的XCL文件,没有使用CONFIG路径下的XCL文件,
这可能和某些版本有关。
在编译过程中IAR使用了cfg1s.xcl和cfg8515.xcl两个XCL文件,修改了其中一个cfg1s.xcl文件,全文如下
//////////////////////////////////////////////////////////////////////////////
//
// Segment definitions for a generic -v1 -ms target.
//
// File version:$Name: V2.21H V2.21G V2_25A $
//
// The '_..X_' prefix is used by C-SPY as an indication that the label should
// not be displayed in the dissassembly window.
//
// Set up XLINK
-ca90
-w29
//////////////////////////////////////////////////////////////////////////////
// Code (flash) segments
-Z(CODE)INTVEC=0-_..X_INTVEC_SIZE
-Z(CODE)TINY_F=_..X_FLASH_BASE-FF
-Z(CODE)NEAR_F=_..X_FLASH_BASE-_..X_FLASH_END
-Z(CODE)SWITCH=_..X_FLASH_BASE-_..X_FLASH_END
-Z(CODE)INITTAB=_..X_FLASH_BASE-_..X_FLASH_END
-Z(CODE)DIFUNCT=_..X_FLASH_BASE-_..X_FLASH_END
-Z(CODE)CODE=_..X_FLASH_BASE-_..X_FLASH_END
-Z(CODE)TINY_ID=_..X_FLASH_BASE-_..X_FLASH_END
-Z(CODE)NEAR_ID=_..X_FLASH_BASE-_..X_FLASH_END
// Initialize unused interrupt vectors with RETI
-H1895 -h(CODE)0-(_..X_INTVEC_SIZE-1)
//////////////////////////////////////////////////////////////////////////////
// Data (SRAM, external ROM or external NV RAM) memory
-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND
-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_CSTACK_BASE-_..X_EXT_CSTACK_END
-Z(DATA)HEAP+_..X_HEAP_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
-Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_RSTACK_BASE-_..X_EXT_RSTACK_END
-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
-Z(DATA)NEAR_C=_..X_EXT_ROM_BASE-_..X_EXT_ROM_END
-Z(DATA)NEAR_N=_..X_EXT_NV_BASE-_..X_EXT_NV_END
//////////////////////////////////////////////////////////////////////////////
// Internal EEPROM
-Z(XDATA)EEPROM_I,EEPROM_N,EEPROM_AN=1-_..X_EEPROM_END
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep
cfg8515.xcl文件全文
//////////////////////////////////////////////////////////////////////////////
//
// Contains resource definitions at Atmel AT90S8515
//
// File version: $Name: V2.21H V2.21G V2_25A $
//
// The '_..X_' prefix is used by C-SPY as an indication that the label should
// not be displayed in the dissassembly window.
//
//////////////////////////////////////////////////////////////////////////////
// Code (flash) segments
-D_..X_INTVEC_SIZE=1A // 2 bytes * 13 vectors
-D_..X_FLASH_END=1FFF // End of flash memory
//////////////////////////////////////////////////////////////////////////////
// Data (SRAM, external ROM or external NV RAM) memory
-D_..X_SRAM_BASE=60 // Start of ram memory
-D_..X_SRAM_TEND=FF // End of tiny ram memory
-D_..X_SRAM_END=25F // End of ram memory
//////////////////////////////////////////////////////////////////////////////
// Internal EEPROM
-D_..X_EEPROM_END=1FF // End of eeprom memory
先对比一下使用的XCL文件,再检查有没有EEPROM的初始化数据,否则EEP文件肯定是空的,另外XLINK要升级到4.53F。
如文件
#include
__eeprom unsigned char test1=0x89;
void main(void)
{
unsigned char i;
i=test1;
while(1);
}
产生的EEP文件内容为
:010001008975
:00000001FF
MAP文件部分内容,可以看到使用了两个XCL文件。
################################################################################
# #
# IAR Universal Linker V4.53F/WIN #
# #
# Link time =21/Jan/200207:35:37 #
# Target CPU =A90 #
# List file =E:\zwq\iar\Debug\List\test.map #
# Output file 1 =E:\zwq\iar\Debug\Exe\test.dbg #
# Format: ubrof6 #
# UBROF version 6.0.0 #
# Output file 2 =E:\zwq\iar\Debug\Exe\test.hex #
# Format: intel-extended, variant: -y(CODE) #
# Output file 3 =E:\zwq\iar\Debug\Exe\test.eep #
# Format: intel-extended, variant: -y(XDATA) #
# Command line=E:\zwq\iar\Debug\Obj\test.r90 #
# E:\ZWQ\IAR\AVR\lib\dl1s.r90 -o #
# E:\zwq\iar\Debug\Exe\test.dbg -Fubrof6 -l #
# E:\zwq\iar\Debug\List\test.map -xms #
# -IE:\ZWQ\IAR\AVR\LIB\ -f #
# E:\ZWQ\IAR\AVR\src\template\cfg8515.xcl #
# (-D_..X_INTVEC_SIZE=1A -D_..X_FLASH_END=1FFF #
# -D_..X_SRAM_BASE=60 -D_..X_SRAM_TEND=FF #
# -D_..X_SRAM_END=25F -D_..X_EEPROM_END=1FF) #
# -D_..X_HEAP_SIZE=10 -D_..X_CSTACK_SIZE=20 #
# -D_..X_RSTACK_SIZE=20 -e_Printf_2=_Printf #
# -e_Scanf_2=_Scanf -f #
# E:\ZWQ\IAR\AVR\src\template\cfg1s.xcl (-ca90 #
# -w29 -Z(CODE)INTVEC=0-_..X_INTVEC_SIZE #
# -Z(CODE)TINY_F=_..X_FLASH_BASE-FF #
# -Z(CODE)NEAR_F=_..X_FLASH_BASE-_..X_FLASH_END #
# -Z(CODE)SWITCH=_..X_FLASH_BASE-_..X_FLASH_END #
# -Z(CODE)INITTAB=_..X_FLASH_BASE-_..X_FLASH_END #
# -Z(CODE)DIFUNCT=_..X_FLASH_BASE-_..X_FLASH_END #
# -Z(CODE)CODE=_..X_FLASH_BASE-_..X_FLASH_END #
# -Z(CODE)TINY_ID=_..X_FLASH_BASE-_..X_FLASH_END #
# -Z(CODE)NEAR_ID=_..X_FLASH_BASE-_..X_FLASH_END #
# -H1895 -h(CODE)0-(_..X_INTVEC_SIZE-1) #
# -Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_ #
# SRAM_TEND #
# -Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_. #
# .X_SRAM_END,_..X_EXT_CSTACK_BASE-_..X_EXT_CSTACK_ #
# END #
# -Z(DATA)HEAP+_..X_HEAP_SIZE=_..X_SRAM_BASE-_..X_S #
# RAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END #
# -Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_SRAM_BASE-_. #
# .X_SRAM_END,_..X_EXT_RSTACK_BASE-_..X_EXT_RSTACK_ #
# END #
# -Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_EN #
# D,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END #
# -Z(DATA)NEAR_C=_..X_EXT_ROM_BASE-_..X_EXT_ROM_END #
# -Z(DATA)NEAR_N=_..X_EXT_NV_BASE-_..X_EXT_NV_END #
# -Z(XDATA)EEPROM_I,EEPROM_N,EEPROM_AN=1-_..X_EEPRO #
# M_END #
# -Ointel-extended,(CODE)=.hex #
# -Ointel-extended,(XDATA)=.eep) #
# -D_..X_FLASH_BASE=_..X_INTVEC_SIZE #
# -D_..X_EXT_SRAM_BASE=0 -D_..X_EXT_SRAM_END=0 #
# -D_..X_EXT_ROM_BASE=0 -D_..X_EXT_ROM_END=0 #
# -D_..X_EXT_NV_BASE=_..X_SRAM_BASE #
# -D_..X_EXT_NV_END=_..X_SRAM_END #
# -D_..X_EXT_CSTACK_BASE=_..X_SRAM_BASE #
# -D_..X_EXT_CSTACK_END=_..X_SRAM_BASE #
# -D_..X_EXT_RSTACK_BASE=_..X_SRAM_BASE #
# -D_..X_EXT_RSTACK_END=_..X_SRAM_BASE #
# #
# Copyright 1987-2001 IAR Systems. All rights reserved. #
################################################################################
网上找来的. 这个方法试过了,今天好详细的按上楼谙的做过了一次,芯片还是不能工作!!!
我用的是IAR4.20,这有关吗?。 本人是这样设置的.首先修改所选芯片对应的*.xcl文件(在安装目录中\IAR Systems\Embedded Workbench 4.0 Evaluation\avr\src\template),本人使用的是tiny26,所以修改的文件名为:cfgtiny26.xcl,也就是下图配置中对应的文件:
http://cache.amobbs.com/bbs_upload782111/files_6/armok01139518.JPG
编辑此文件,在最后处添加如下命令行:
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep
再设置Link--Output中的Format选项,选择ubrof6(forced),如此上面的Override default中就会生成可在AVRstudio调试的.dbg文件.下图所示:
http://cache.amobbs.com/bbs_upload782111/files_6/armok01139519.JPG
配置好后再编译,可在对应的目录Debug\Exe中生成供烧写用的.hex和.eep文件,以及调试用的.dbg文件,本人亲测,经过烧写芯片验证无误.(使用IAR for AVR V4.20A和AVRstudio4.12 sp4) 欢迎各位批评指正^_^ 还是不行,
看来我要换过一个版本再试试了,
再不行我就只好不用IAR,改用,GCC了. 我不知道 4.20A 和 3.20A有多大的区别,我用 IAR 3.20A用了2年多,调试和烧录都非常正常。根据你的情况我觉得是破解不完全。我听朋友说 4.20A版本安装的时候,随便一个序列号都能安装,但就是在使用时经常会出问题。 你自己的烧录器不对 烧录器应该不会有问题,我把我的程序改为CVAVR的程序后,它生成的.HEX文件烧录就很正常.
今晚还是换个版本试一下. 你的烧路器不识别IAR的HEX文件的倒数第二行的重定位代码.不同的软件产生的HEX代码书写形式不一样的. """你的烧路器不识别IAR的HEX文件的倒数第二行的重定位代码"""
那请问aini,那有什么办法可以使我的烧录器第二行的重定位代码呢?
我觉得IAR真的很好用,不想这样就放弃它。谢谢 终于搞定了,我把“HEX文件的倒数第二行的重定位代码”删掉了,就可以了。谢谢aini。 【20楼】 steven 独钓一江秋
是对的! 怎么禁止输出重定位代码,每次生成后都要去删除,很麻烦的! 学习了 呵呵 我是如果要烧写 直接把项目设成 release 模式 生成的.A90文件 我的西尔特编程器就可以认识的 刚好遇到这个问题,IAR真麻烦.. mark! MARK 玛瑞克{:smile:} 学习了,真不错
页:
[1]