Hammer 发表于 2005-10-21 19:12:10

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)

zrl700424 发表于 2005-10-22 15:43:01

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

korren 发表于 2005-10-22 18:10:13

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

Hammer 发表于 2005-10-24 08:56:59

谢谢楼上的两位,现已成功解决。

Hammer 发表于 2005-10-24 09:07:12

我还想问一下,在IAR AVR中如何生成能在STDIO中调试的文件。我试过生成了D90,DBG文件,结果STDIO都不能,提示格式错误。

fbscici 发表于 2006-7-12 14:30:33

我按照testcode和korren的设置,生成的HEX文件灌到MEGA16内运行不正常,但同样的程序用ICC编译后的HEX文件灌到MEGA16内运行正常。请问为什么会这样的呢?我用的是IAR4.12A版

lovenashte 发表于 2006-7-23 11:49:55

会有这样的事吗?

不会吧,我现在正在用这个软件.

northc 发表于 2006-8-10 20:24:37

有这样的事,按照korren的办法,生成IAR_test_data.hex和IAR_test_eeprom.hex,不运行...

northc 发表于 2006-8-10 21:44:37

我这样解决了:

    如上生成的eeprom文件可以用,只是*_data.hex不能用,代之以默认的*.a90文件,但格式要改:Options...→Linker→Output→Format→Other→Output选择intel-extended

    这是为什么?

dragon_mr 发表于 2006-12-25 11:27:23

我是安装你们说的选了,还是有错误。

http://cache.amobbs.com/bbs_upload782111/files_large/armok01139017.JPG

出现的提示是:

http://cache.amobbs.com/bbs_upload782111/files_large/armok01139018.JPG

dragon_mr 发表于 2006-12-25 11:28:29

请求支持,不胜感激,很急!谢谢

heky 发表于 2006-12-25 14:53:48

iar编译的程序不能运行基本上是自己写代码的问题吧.我一直都是编译的最小size,都没问题啊,你在看看工程设置的cstack,rstack大小.

dlcpld 发表于 2006-12-25 22:47:45

为什么我这样设置生存的.hex文件,用ISPlay装入文件时会出现文件转换失败的提示

joson 发表于 2006-12-26 17:05:13

我用的是 IAR 3.20A 版的,我是直接生成.d90文件,然后在studio里面直接 open .d90文件,用了2年了,一直没有出现过上述的问题。

http://cache.amobbs.com/bbs_upload782111/files_6/armok01139153.jpg

dlcpld 发表于 2006-12-27 21:26:01

我生存的.hex文件用ISPlay装入时怎么提示文件大于64K,文件转换失败的提示

cnpollux 发表于 2006-12-27 22:58:51

.A90的文件其实就是HEX文件,扩展名不同而已

lilei0902 发表于 2006-12-28 09:37:26

我以上的方法都试过了,是可以生成相应的文件类型,但.hex和.a90下载到芯片时,芯片都不能运行,请问各位是怎么解决烧录问题的??谢谢。。

lilei0902 发表于 2006-12-29 17:08:10

难道只是我生成的文件不能烧录,大家的都可以正常运行吗?

是软件没设好,还是没有破解好?

abc2001 发表于 2006-12-29 17:16:58

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. #

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



网上找来的.

lilei0902 发表于 2006-12-29 21:14:28

这个方法试过了,今天好详细的按上楼谙的做过了一次,芯片还是不能工作!!!

我用的是IAR4.20,这有关吗?。

steven 发表于 2006-12-30 08:55:25

本人是这样设置的.首先修改所选芯片对应的*.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) 欢迎各位批评指正^_^

lilei0902 发表于 2006-12-31 12:37:08

还是不行,

看来我要换过一个版本再试试了,

再不行我就只好不用IAR,改用,GCC了.

joson 发表于 2006-12-31 14:17:24

我不知道 4.20A 和 3.20A有多大的区别,我用 IAR 3.20A用了2年多,调试和烧录都非常正常。根据你的情况我觉得是破解不完全。我听朋友说 4.20A版本安装的时候,随便一个序列号都能安装,但就是在使用时经常会出问题。

aini 发表于 2006-12-31 15:40:28

你自己的烧录器不对

lilei0902 发表于 2006-12-31 17:19:39

烧录器应该不会有问题,我把我的程序改为CVAVR的程序后,它生成的.HEX文件烧录就很正常.

今晚还是换个版本试一下.

aini 发表于 2007-1-1 11:25:18

你的烧路器不识别IAR的HEX文件的倒数第二行的重定位代码.不同的软件产生的HEX代码书写形式不一样的.

lilei0902 发表于 2007-1-1 19:59:31

"""你的烧路器不识别IAR的HEX文件的倒数第二行的重定位代码"""

那请问aini,那有什么办法可以使我的烧录器第二行的重定位代码呢?

我觉得IAR真的很好用,不想这样就放弃它。谢谢

lilei0902 发表于 2007-1-1 23:27:12

终于搞定了,我把“HEX文件的倒数第二行的重定位代码”删掉了,就可以了。谢谢aini。

12_free 发表于 2007-7-28 16:17:47

【20楼】 steven 独钓一江秋

是对的!

dajianghe 发表于 2007-10-24 10:48:58

怎么禁止输出重定位代码,每次生成后都要去删除,很麻烦的!

sody 发表于 2008-1-3 19:11:44

学习了 呵呵

chenerbox1 发表于 2008-4-25 16:46:53

我是如果要烧写 直接把项目设成 release 模式 生成的.A90文件 我的西尔特编程器就可以认识的

yxlcarter 发表于 2009-9-30 23:22:45

刚好遇到这个问题,IAR真麻烦..

003900107 发表于 2011-9-13 10:29:37

mark!

bitant 发表于 2011-12-5 14:11:45

MARK

yfgww 发表于 2012-8-2 09:19:19

玛瑞克{:smile:}

gms316 发表于 2014-4-24 20:48:07

学习了,真不错
页: [1]
查看完整版本: IAR AVR怎么生成HEX文件啊.