Codewarrior 中的 .prm 文件(1)

要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于 Codewarrior 5.0 编译器,单片机采用MC9S12XS128

通过项目模板建立的新项目中都有一个名字为project.prm的文件,位于Project Settings->Linker Files文件夹下。一个标准的基于XS128.prm文件起始内容如下:

 

.prm文件范例:

 

/* This is a linker parameter file for the MC9S12XS128 */

/*This file is setup to use the HCS12X core only.If you plan to also use the XGATE in your project, best create a new project with the'New Project Wizard' (File|New... menu in the CodeWarrior IDE) and choose the appropriateproject parameters.*/

 

NAMES      /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your dditional files */

END

 

SEGMENTS  /* here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. All addresses are logical' */

 

/* Register space  */

/*    IO_SEG         = PAGED                                     0x0000  TO   0x07FF; intentionally not defined */

 

/* non-paged RAM */

      RAM           = READ_WRITE   DATA_NEAR                 0x2000  TO   0x3FFF;

 

/* non-banked FLASH */

      ROM_4000      = READ_ONLY   DATA_NEAR   IBCC_NEAR   0x4000  TO   0x7FFF;

      ROM_C000      = READ_ONLY   DATA_NEAR   IBCC_NEAR   0xC000  TO   0xFEFF;

/*    VECTORS        = READ_ONLY                               0xFF00   TO   0xFFFF; intentionally not defined: used for VECTOR commands below */

//OSVECTORS     = READ_ONLY                                   0xFF10   TO   0xFFFF;  /* OSEK interrupt vectors (use your vector.o) */

 

/* paged EEPROM                                                  0x0800   TO   0x0BFF; addressed through EPAGE */

      EEPROM_00     = READ_ONLY   DATA_FAR   IBCC_FAR    0x000800  TO  0x000BFF;

      EEPROM_01     = READ_ONLY   DATA_FAR   IBCC_FAR    0x010800  TO  0x010BFF;

      EEPROM_02     = READ_ONLY   DATA_FAR   IBCC_FAR    0x020800  TO  0x020BFF;

      EEPROM_03     = READ_ONLY   DATA_FAR   IBCC_FAR    0x030800  TO  0x030BFF;

      EEPROM_04     = READ_ONLY   DATA_FAR   IBCC_FAR    0x040800  TO  0x040BFF;

      EEPROM_05     = READ_ONLY   DATA_FAR   IBCC_FAR    0x050800  TO  0x050BFF;

      EEPROM_06     = READ_ONLY   DATA_FAR   IBCC_FAR    0x060800  TO  0x060BFF;

      EEPROM_07     = READ_ONLY   DATA_FAR   IBCC_FAR    0x070800  TO  0x070BFF;

 

/* paged RAM:                                                    0x1000    TO   0x1FFF; addressed through RPAGE */

/* RAM_FE            = READ_WRITE                             0xFE1000  TO   0xFE1FFF; intentionally not defined: equivalent to RAM: 0x2000..0x2FFF */

/*    RAM_FF         = READ_WRITE                             0xFF1000  TO   0xFF1FFF; intentionally not defined: equivalent to RAM: 0x3000..0x3FFF */

/* paged FLASH:                                                  0x8000    TO  0xBFFF; addressed through PPAGE */

      PAGE_F8        = READ_ONLY   DATA_FAR   IBCC_FAR    0xF88000  TO  0xF8BFFF;

      PAGE_F9        = READ_ONLY   DATA_FAR   IBCC_FAR    0xF98000  TO  0xF9BFFF;

      PAGE_FA        = READ_ONLY   DATA_FAR   IBCC_FAR    0xFA8000  TO  0xFABFFF;

      PAGE_FB        = READ_ONLY   DATA_FAR   IBCC_FAR    0xFB8000  TO  0xFBBFFF;

      PAGE_FC        = READ_ONLY   DATA_FAR   IBCC_FAR    0xFC8000  TO  0xFCBFFF;

/*    PAGE_FD        = READ_ONLY                             0xFD8000  TO  0xFDBFFF; intentionally not defined: equivalent to ROM_4000 */

      PAGE_FE        = READ_ONLY   DATA_FAR   IBCC_FAR    0xFE8000  TO  0xFEBFFF;

/*    PAGE_FF        = READ_ONLY                              0xFF8000  TO  0xFFBFFF; intentionally not defined: equivalent to ROM_C000 */

END

 

PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */

 

      _PRESTART,                                /* Used in HIWARE format: jump to _Startup at the code start */

      STARTUP,                                  /* startup data structures */

      ROM_VAR,                                 /* constant variables */

      STRINGS,                                  /* string literals */

      VIRTUAL_TABLE_SEGMENT,                 /* C++ virtual table segment */

      //.ostext,                                   /* eventually OSEK code  */

      DEFAULT_ROM, NON_BANKED,             /* runtime routines which must not be banked */

      COPY                                      /* copy down information: how to initialize variables */

                                                 /* in case you want to use ROM_4000 here as well, make sure

                                                   that all files (incl. library files) are compiled with the

                                                   option: -OnB=b */

                           INTO           ROM_C000 /*, ROM_4000*/ ;

 

      OTHER_ROM         INTO           PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;

 

    //.stackstart,               /* eventually used for OSEK kernel awareness: Main-Stack Start */

      SSTACK,                 /* allocate stack first to avoid overwriting variables on overflow */

    //.stackend,                 /* eventually used for OSEK kernel awareness: Main-Stack End */

      PAGED_RAM,              /* there is no need for paged data accesses on this derivative */

 

      DEFAULT_RAM             /* all variables, the default RAM location */

                            INTO                  RAM;

 

      DISTRIBUTE          DISTRIBUTE_INTO

                                           ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;

      CONST_DISTRIBUTE  DISTRIBUTE_INTO

                                           ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;

      DATA_DISTRIBUTE   DISTRIBUTE_INTO

                                           RAM;

       //.vectors          INTO  OSVECTORS; /* OSEK vector table */

END

 

ENTRIES   /* keep the following unreferenced variables */

             /* OSEK: always allocate the vector table and all dependent objects */

             //_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart

END

 

STACKSIZE   0x100   /* size of the stack (will be allocated in DEFAULT_RAM) */

 

/* use these definitions in plane of the vector table ('vectors') above */

VECTOR 0 _Startup  /* reset vector: this is the default entry point for a C/C++ application. */

//VECTOR 0 Entry  /* reset vector: this is the default entry point for an Assembly application. */

//INIT Entry      /* for assembly applications: that this is as well the initialization entry point */

 

 

你可能感兴趣的:(职场,休闲,prm,cw,codewarrior)