|
发表于 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. #
################################################################################
网上找来的. |
|