本站域名:http://www.xiao-qi.com/
IAR C ew2.xxx版本如何生成.hex,.eep和.dbg文件,使用AVR Studio进行仿真调试的方法
詹卫前先生供稿

 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. #
 ################################################################################
Copyright© 1999-2002, 晓奇工作室 E-Mail:info*xiao-qi.com