搜索
bottom↓
回复: 36

IAR AVR怎么生成HEX文件啊.

[复制链接]

出0入0汤圆

发表于 2005-10-21 19:12:10 | 显示全部楼层 |阅读模式
我用的是IAR AVR3.20版本。网络上大多介绍的是2.23版本。现在只能生成d90文件。而这个文件在AVR STDIO中又不认。又不能写入芯片。要怎么设置才能生成INTEL HEX文件?



在编译过程序中出现以下提示:

Error[e133]: 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)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 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

出0入0汤圆

发表于 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

出0入0汤圆

 楼主| 发表于 2005-10-24 08:56:59 | 显示全部楼层
谢谢楼上的两位,现已成功解决。

出0入0汤圆

 楼主| 发表于 2005-10-24 09:07:12 | 显示全部楼层
我还想问一下,在IAR AVR中如何生成能在STDIO中调试的文件。我试过生成了D90,DBG文件,结果STDIO都不能,提示格式错误。

出0入0汤圆

发表于 2006-7-12 14:30:33 | 显示全部楼层
我按照testcode和korren的设置,生成的HEX文件灌到MEGA16内运行不正常,但同样的程序用ICC编译后的HEX文件灌到MEGA16内运行正常。请问为什么会这样的呢?我用的是IAR4.12A版

出0入0汤圆

发表于 2006-7-23 11:49:55 | 显示全部楼层
会有这样的事吗?

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

出0入0汤圆

发表于 2006-8-10 20:24:37 | 显示全部楼层
有这样的事,按照korren的办法,生成IAR_test_data.hex和IAR_test_eeprom.hex,不运行...

出0入0汤圆

发表于 2006-8-10 21:44:37 | 显示全部楼层
我这样解决了:

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

    这是为什么?

出0入0汤圆

发表于 2006-12-25 11:27:23 | 显示全部楼层
我是安装你们说的选了,还是有错误。



出现的提示是:

出0入0汤圆

发表于 2006-12-25 11:28:29 | 显示全部楼层
请求支持,不胜感激,很急!谢谢

出0入0汤圆

发表于 2006-12-25 14:53:48 | 显示全部楼层
iar编译的程序不能运行基本上是自己写代码的问题吧.我一直都是编译的最小size,都没问题啊,你在看看工程设置的cstack,rstack大小.

出0入0汤圆

发表于 2006-12-25 22:47:45 | 显示全部楼层
为什么我这样设置生存的.hex文件,用ISPlay装入文件时会出现文件转换失败的提示

出0入0汤圆

发表于 2006-12-26 17:05:13 | 显示全部楼层
我用的是 IAR 3.20A 版的,我是直接生成.d90文件,然后在studio里面直接 open .d90文件,用了2年了,一直没有出现过上述的问题。

出0入0汤圆

发表于 2006-12-27 21:26:01 | 显示全部楼层
我生存的.hex文件用ISPlay装入时怎么提示文件大于64K,文件转换失败的提示

出0入0汤圆

发表于 2006-12-27 22:58:51 | 显示全部楼层
.A90的文件其实就是HEX文件,扩展名不同而已

出0入0汤圆

发表于 2006-12-28 09:37:26 | 显示全部楼层
我以上的方法都试过了,是可以生成相应的文件类型,但.hex和.a90下载到芯片时,芯片都不能运行,请问各位是怎么解决烧录问题的??谢谢。。

出0入0汤圆

发表于 2006-12-29 17:08:10 | 显示全部楼层
难道只是我生成的文件不能烧录,大家的都可以正常运行吗?

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

出0入0汤圆

发表于 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/2001  14: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/2002  07: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. #

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



网上找来的.

出0入0汤圆

发表于 2006-12-29 21:14:28 | 显示全部楼层
这个方法试过了,今天好详细的按上楼谙的做过了一次,芯片还是不能工作!!!

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

出0入0汤圆

发表于 2006-12-30 08:55:25 | 显示全部楼层
本人是这样设置的.首先修改所选芯片对应的*.xcl文件(在安装目录中\IAR Systems\Embedded Workbench 4.0 Evaluation\avr\src\template),本人使用的是tiny26,所以修改的文件名为:cfgtiny26.xcl,也就是下图配置中对应的文件:





编辑此文件,在最后处添加如下命令行:

-Ointel-extended,(CODE)=.hex

-Ointel-extended,(XDATA)=.eep



再设置Link--Output中的Format选项,选择ubrof6(forced),如此上面的Override default中就会生成可在AVRstudio调试的.dbg文件.下图所示:





配置好后再编译,可在对应的目录Debug\Exe中生成供烧写用的.hex和.eep文件,以及调试用的.dbg文件,本人亲测,经过烧写芯片验证无误.(使用IAR for AVR V4.20A和AVRstudio4.12 sp4) 欢迎各位批评指正^_^

出0入0汤圆

发表于 2006-12-31 12:37:08 | 显示全部楼层
还是不行,

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

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

出0入0汤圆

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

出0入0汤圆

发表于 2006-12-31 15:40:28 | 显示全部楼层
你自己的烧录器不对

出0入0汤圆

发表于 2006-12-31 17:19:39 | 显示全部楼层
烧录器应该不会有问题,我把我的程序改为CVAVR的程序后,它生成的.HEX文件烧录就很正常.

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

出0入0汤圆

发表于 2007-1-1 11:25:18 | 显示全部楼层
你的烧路器不识别IAR的HEX文件的倒数第二行的重定位代码.不同的软件产生的HEX代码书写形式不一样的.

出0入0汤圆

发表于 2007-1-1 19:59:31 | 显示全部楼层
"""你的烧路器不识别IAR的HEX文件的倒数第二行的重定位代码"""

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

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

出0入0汤圆

发表于 2007-1-1 23:27:12 | 显示全部楼层
终于搞定了,我把“HEX文件的倒数第二行的重定位代码”删掉了,就可以了。谢谢aini。

出0入0汤圆

发表于 2007-7-28 16:17:47 | 显示全部楼层
【20楼】 steven 独钓一江秋

是对的!

出0入0汤圆

发表于 2007-10-24 10:48:58 | 显示全部楼层
怎么禁止输出重定位代码,每次生成后都要去删除,很麻烦的!

出0入0汤圆

发表于 2008-1-3 19:11:44 | 显示全部楼层
学习了 呵呵

出0入0汤圆

发表于 2008-4-25 16:46:53 | 显示全部楼层
我是如果要烧写 直接把项目设成 release 模式 生成的.A90文件 我的西尔特编程器就可以认识的

出0入0汤圆

发表于 2009-9-30 23:22:45 | 显示全部楼层
刚好遇到这个问题,IAR真麻烦..

出0入0汤圆

发表于 2011-9-13 10:29:37 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-12-5 14:11:45 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-8-2 09:19:19 | 显示全部楼层
玛瑞克

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-23 22:53

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

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