查看: 4764|回复: 1

[S12] 关于 XS128 的PRM 文件定义与引用问题,请高手帮忙

[复制链接]

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
发表于 2009-4-7 12:17:25 | 显示全部楼层 |阅读模式
我有64K 的 一个单精度浮点数数组。  按照一个数据占用4字节的 单精度存储,计算出是64K 数据。。在存储的时候  根据 PRM 文件里边定义

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  */
      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*/;
      DEFAULT_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





使用#pragma CONST_SEG DISTRIBUTE  在数组前 声明




但是 总是出现  out of allocation space in segment ROM_400 at address 0x4000

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

把他改成

      DISTRIBUTE        DISTRIBUTE_INTO
                               PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;


出错消息 就成了 但是 总是出现  out of allocation space in segment PAGE_FE

那位高手  分析下  问题  

多谢·~~~~
 
另外一个页面是16K    4个页面才是64K    不知道是不是连续  存储 问题,,现在如果把数组的数据改的小于16K的时候,就可以编译。
我知道答案 目前已有0人回答
回复

使用道具 举报

该用户从未签到

4

主题

44

帖子

0

新手上路

Rank: 1

积分
127
最后登录
1970-1-1
发表于 2009-4-7 22:00:45 | 显示全部楼层

RE:关于 XS128 的PRM 文件定义与引用问题,请高手帮忙

64KB的数据最好分成4个16KB的,一个页面最多16KB,64KB肯定是不行,即使编译通过了,CPU在寻址的时候也会出现混乱。
还有提醒一下,将数据放在分页地址中,注意其CPU的寻址范围,是逻辑地址还是全局的地址。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-5-10 16:34 , Processed in 0.110720 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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