首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在codewarrior中,如何把常量放在指定flash地址上?

好象有些明白了,谢谢usliwu!真的非常感谢!!
更正!
程序区的RAM(P-RAM)可以用来存储变量,但是读取存在程序区的RAM中的变量比读取存在数据区的RAM中的变量要慢。定义方法如:__pmem int X,Y; 注意linker command file也要修改。
根据TARGETING——56800E中的说明好象是说__pmem int x,y ;是在程序区中的FLASH 而不是PRAM中定义变量,不知我理解是否正确?还有如果在FLASH 中定义变量而不是常数,而FLASH 中的写次数是有限制的,怎麽解决这样的问题呢?
谢谢usliwu的帮助!!
当用程序区RAM来存放变量时应注意几点
1) 因为程序区RAM从0x0002,f800开始的,所以对这个区的操作超过了16位地址范围,所以CodeWarrior Target应选用idm pROM-xRAM。意思是用Large Memory 模式
2) 将下例语句加到linker Command file "ldm_pROM_xRAM.cmd" 的最后就可以了

       .
          .
          .
      .ApplicationData : # section is added by user
        {
                * (.bss.char.pmem)
                * (.bss.pmem)
        
         } > .p_internal_RAM

         .
         .
         .
}
谢谢你 usliwu!
我试了一下,可以使用了,可是如果想同时使用PRAM和PROM时,定义上好象又有问题了,我说的是*(.bss.pmem)放到.p_internal_RAM 段就不能放到.p_code段了,因为有些故障信息还是存在PROM中比较好,*(.bss.pmem)这个名称可以自己修改和定义吗?
*(.bss.pmem)表示随机变量,所以不能存在.p_code段。如果想把故障信息保存,最好是存在data Flash段,所以你要在RAM区开一个故障信息区,仍后定时的把这个区的数据拷贝到Flash区。不过你自己需要写一个Flash编程程序。Freescale 网站上有这样的资料介绍如何用Flash来模拟EEPROM. 你可搜索" Flash Emulation"的资料·
现在总算明白了,谢谢usliwu!!
返回列表