본문 바로가기
HardWare/AVR

[AVR]IAR에서 sprintf 소수점 사용하기

by 학수씨 2009. 9. 13.

xcl 파일을 수정해야한다..

atmega128 기준..

/*                      - lnkm128.xcl -
 *
 *   XLINK command file for the ICCAVR C-compiler using the --cpu=m128, -ms
 *   options. Segments are defined for an ATmega128 whithout external
 *   memory. It is also possible to "add" external SRAM, EPROM and EEPROM.
 *
 *   Usage: xlink your_file(s) -f lnkm128
 *
 *   File version: $Revision: 1.9 $
 */

/*====================================================*/
/*
 * Constants used down below,
 * Do not change these lines,
 * if it is not stated otherwise
 */

/* Code (flash) segments */
-D_..X_INTVEC_SIZE=8C   /* 4 bytes * 35 vectors */
-D_..X_FLASH_TEND=FF    /* End of tiny flash memory */
-D_..X_FLASH_NEND=FFFF  /* End of near flash memory */
-D_..X_FLASH_END=1FFFF  /* End of flash memory */
/* Internal data memory */

/*
 * Change the two lines below to 60(BASE) and FF(TEND)
 * if you are running in "mega103 mode"
 */
-D_..X_SRAM_BASE=100    /* Start of ram memory */
-D_..X_SRAM_TEND=100    /* End of tiny ram memory */

-D_..X_SRAM_END=10FF    /* End of ram memory */
/* Internal EEPROM */
-D_..X_EEPROM_END=FFF   /* End of eeprom memory */
/*====================================================*/


/*
 * Modify the lines below to alter the size of the RSTACK, CSTACK and HEAP
 * segments. These need to be fine tuned to suit your specific application.
 * The '_..X_' prefix is used by C-SPY as an indication that the label should
 * not be displayed in the dissassembly window.
 */
-D_..X_CSTACK_SIZE=200  /* 512 bytes for auto variables and saved registers. */
-D_..X_RSTACK_SIZE=40   /* 64 bytes for return addresses, equivalent to 32 */
                        /* levels of calls, including interrupts. */
-D_..X_HEAP_SIZE=100    /* 256 bytes of heap. */
-D_..X_NEAR_HEAP_SIZE=100    /* 256 bytes of heap. */

/*
 * Modify these lines if you have an external SRAM connected to the system.
 *
 * Note: Remember to turn on the external data and address busses in
 *       __low_level_init if external memory is used.
 */
-D_..X_EXT_SRAM_BASE=_..X_SRAM_BASE
-D_..X_EXT_SRAM_END=_..X_SRAM_END

/*
 * Modify these lines if you have an external EPROM connected to the system.
 *
 * Note: Remember to turn on the external data and address busses in
 *       __low_level_init if external memory is used.
 */
-D_..X_EXT_EPROM_BASE=_..X_SRAM_BASE
-D_..X_EXT_EPROM_END=_..X_SRAM_END

/*
 * Modify these lines if you have an external EEPROM connected to the system.
 *
 * Note: Remember to turn on the external data and address busses in
 *       __low_level_init if external memory is used.
 */
-D_..X_EXT_EEPROM_BASE=_..X_SRAM_BASE
-D_..X_EXT_EEPROM_END=_..X_SRAM_END


/*
 * The following segments are located in the internal memory of
 * the ATmega128. Do not change these lines.
 */

/* Define CPU */
-ca90

/* Code memory */
-Z(CODE)INTVEC=0-(_..X_INTVEC_SIZE-1)

/* Fill unused interrupt vector's with RETI */
-H1895
-h(CODE)0-_..X_INTVEC_SIZE

-Z(CODE)TINY_F=_..X_INTVEC_SIZE-_..X_FLASH_TEND
-Z(CODE)NEAR_F,SWITCH,DIFUNCT=_..X_INTVEC_SIZE-_..X_FLASH_NEND
-Z(CODE)CODE=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(FARCODE)FAR_F=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(CODE)HUGE_F,INITTAB=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(CODE)TINY_ID,NEAR_ID=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(CODE)CHECKSUM#_..X_FLASH_END

/* Internal data memory */
-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND
-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END

/*
 * If external SRAM is available it is possible to place the stacks there.
 * However, the external memory is slower than the internal so moving the
 * stacks to the external memory will degrade the system performance.
 */
-Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END /* ,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END */
-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END /* ,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END */

/*
 * If external SRAM is available it might be a good idea to move the
 * heap segment there, i.e. remove the _..X_SRAM_BASE-_..X_SRAM_END range.
 */
-Z(DATA)HEAP+_..X_HEAP_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
-Z(DATA)IOSTREAM_N#_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
-Z(DATA)NEAR_HEAP+_..X_NEAR_HEAP_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END

/* Internal eeprom memory */
-Z(XDATA)EEPROM_I,EEPROM_N=0-_..X_EEPROM_END

/*
 * The following segment definitions are only used if external memory is
 * connected to the AVR controller.
 */

/* External EPROM */
-Z(CONST)NEAR_C=_..X_EXT_EPROM_BASE-_..X_EXT_EPROM_END

/* External EEPROM */
-Z(DATA)NEAR_N=_..X_EXT_EEPROM_BASE-_..X_EXT_EEPROM_END

/* Select reduced "printf" support to reduce library size.
   See configuration section in manual concerning printf/sprintf. */

/*Dlib*/
-e_PrintfSmall=_Printf

/*Clib*/
-e_large_write=formatted_write

/*Dlib and Clib*/
-e_large_write_P=_formatted_write_P

/* Disable floating-point support in "scanf" to reduce library size.
   See configuration section in manual concerning scanf/sscanf */

/*Dlib*/
-e_ScanfSmall=_Scanf

/*Clib*/
-e_large_read=formatted_read

/*Dlib and Clib*/
-e_large_read_P=_formatted_read_P


/* Suppress one warning which is not relevant for this processor */
-w29

/* Code will now reside in file aout.a90 or aout.d90, unless -o is specified */
/* .d90 is the default if debug system is linked (option -r) */
/* .a90 is the default without debugging. Default format is -Fmotorola */

댓글