查看: 6843|回复: 8

[其他] XEP100 里怎样将一个数组定义到D_Flash某个地址

[复制链接]

该用户从未签到

3

主题

12

帖子

0

新手上路

Rank: 1

积分
31
最后登录
1970-1-1
发表于 2011-5-19 09:52:47 | 显示全部楼层 |阅读模式
我想将unsigned int a[10]这样一个数组定义到D_Flash(0x100000~0x107FFF)的某个地址比如0x100000(不属于EEE部分),现在写D_Flash已经可以,如果a[10]能直接定在那,那么程序里就可以直接引用a了。试了unsigned int a[10]@0x100000不行。谢谢大家!
以前的DZ60等Freescale等都是可以直接定义到Flash的某个地址的。
如果要用时,再导到RAM里,那样麻烦,固定数据表(并不是固化,偶尔要通过上位机修改)比较多,用一张导一张太耗时,一次导入全部,太耗内存。
 
经调试发现,我定义unsigned int a[10]@0x00800,查看数据,真正定义到全局地址0x13F800(也就是BUF_RAM)去了。
我知道答案 目前已有7人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-5-19 10:23:53 | 显示全部楼层

    RE:XEP100 里怎样将一个数组定义到D_Flash某个地址

    unsigned int a[10]@addr
    addr FLASH必须是程序地址,不是flash的实际地址,这个你可以在rom空间地址分配那一章看到。
    该会员没有填写今日想说内容.

    该用户从未签到

    3

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    31
    最后登录
    1970-1-1
     楼主| 发表于 2011-5-19 11:01:15 | 显示全部楼层

    RE:XEP100 里怎样将一个数组定义到D_Flash某个地址

    版主,你好,假设我就想定到D_Flash的0x100000,下面是一般的prm(先不用XGATE),这个地址该是多少呢?
    /* Register space  */
    /*    IO_SEG        = PAGED         0x0000 TO   0x07FF; intentionally not defined */
    /* non-paged EEPROM */
          EEPROM        = READ_ONLY     0x0C00 TO   0x0FFF;
    /* non-paged RAM */
          RAM           = READ_WRITE    0x2000 TO   0x3FFF ALIGN 2[1:1]; /* word align for XGATE accesses */
    /* non-banked FLASH */
          ROM_4000      = READ_ONLY     0x4000 TO   0x7FFF;
          ROM_C000      = READ_ONLY     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 */
    //orig      EEPROM_00     = READ_ONLY   0x000800 TO 0x000BFF;
          EEPROM_00     = NO_INIT     0x000800 TO 0x000BFF;
          EEPROM_01     = READ_ONLY   0x010800 TO 0x010BFF;
          EEPROM_02     = READ_ONLY   0x020800 TO 0x020BFF;
          EEPROM_03     = READ_ONLY   0x030800 TO 0x030BFF;


    我想着应该是EEPROM_00,所以后面我还定了
    PAGEDEEPROM       INTO  EEPROM_00;
    然后定义变量之前,加上#program都没用
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-5-19 15:08:38 | 显示全部楼层

    回复:XEP100 里怎样将一个数组定义到D_Flash某个地址

    地址是根据下图来的,你可以参考一下。
    MC9S12XEP100RMV1 207.jpg
    该会员没有填写今日想说内容.

    该用户从未签到

    3

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    31
    最后登录
    1970-1-1
     楼主| 发表于 2011-5-19 18:40:00 | 显示全部楼层

    RE:XEP100 里怎样将一个数组定义到D_Flash某个地址

    谢谢版主,虽然知道D_Flash的第1个地址是0x100000,映射到64K为EPage=0x00,地址为0x0800,读D_Flash时,通过设置EPage=0x00,读0x0800地址内容,肯定是得到全局地址为0x100000的D_Flash内容(这个已经试过,是可以的)。但这两个条件如何体现在变量定义的一个地址里面呢(哪怕加上#program ...的条件也行)?

    该用户从未签到

    0

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    1970-1-1
    发表于 2011-5-20 09:44:01 | 显示全部楼层

    RE:XEP100 里怎样将一个数组定义到D_Flash某个地址

    也在看DFlash的资料,等待版主的解答。

    该用户从未签到

    4

    主题

    30

    帖子

    0

    注册会员

    Rank: 2

    积分
    87
    最后登录
    1970-1-1
    发表于 2011-8-12 17:14:47 | 显示全部楼层

    RE:XEP100 里怎样将一个数组定义到D_Flash某个地址

    你只要找到EPage和窗口地址与全局地址之间的换算关系就可以了啊,只要他们的对应关系就找到了啊。

    该用户从未签到

    3

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    31
    最后登录
    1970-1-1
     楼主| 发表于 2011-8-27 17:00:48 | 显示全部楼层

    回复:XEP100 里怎样将一个数组定义到D_Flash某个地址

    回复第 7 楼 于2011-08-12 09:14:47发表:
    你只要找到EPage和窗口地址与全局地址之间的换算关系就可以了啊,只要他们的对应关系就找到了啊。 

    问题是我想一次性用一个定义解决引用D_Flash里变量问题,而不需要程序里切换EPage,如果一个D_Flash里变量这个地方也要引用,那个地方都要引用,或者多个地方引用不同EPage的变量,每次引用前都要设置一下EPage,多麻烦。
    比如:
    unsigned char a@..... ; 假设实际a的Epage=0
     unsigned char b@..... ; 假设实际a的Epage=1
    程序里能不能做到不需要先设置EPage,而引用a如 mTemp=a; 程序会直接自动到EPage为0里去找到a的位置;而引用b如 mTemp=b; 程序会直接自动到EPage为1里去找到b的位置;
     
    我的结论是:不同于DZ60,因为是地址映射,是不方便将变量直接定义到D_Flash某个地址的,解决办法还是要用到D_Flash某个地址的数据就拷贝到内存变量。

    该用户从未签到

    0

    主题

    34

    帖子

    0

    注册会员

    Rank: 2

    积分
    83
    最后登录
    1970-1-1
    发表于 2012-12-15 20:41:32 | 显示全部楼层

    回复:XEP100 里怎样将一个数组定义到D_Flash某个地址

    啧啧啧啧啧啧
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-20 15:38 , Processed in 0.108039 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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