在codewarrior中,如何把常量放在指定flash地址上?
- UID
- 105228
- 性别
- 男
|
好象有些明白了,谢谢usliwu!真的非常感谢!! |
|
|
|
|
|
- UID
- 109211
- 性别
- 男
|
更正!
程序区的RAM(P-RAM)可以用来存储变量,但是读取存在程序区的RAM中的变量比读取存在数据区的RAM中的变量要慢。定义方法如:__pmem int X,Y; 注意linker command file也要修改。 |
|
|
|
|
|
- UID
- 105228
- 性别
- 男
|
根据TARGETING——56800E中的说明好象是说__pmem int x,y ;是在程序区中的FLASH 而不是PRAM中定义变量,不知我理解是否正确?还有如果在FLASH 中定义变量而不是常数,而FLASH 中的写次数是有限制的,怎麽解决这样的问题呢?
谢谢usliwu的帮助!! |
|
|
|
|
|
- UID
- 109211
- 性别
- 男
|
当用程序区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
.
.
.
} |
|
|
|
|
|
- UID
- 105228
- 性别
- 男
|
|
|
|
|
|
- UID
- 105228
- 性别
- 男
|
我试了一下,可以使用了,可是如果想同时使用PRAM和PROM时,定义上好象又有问题了,我说的是*(.bss.pmem)放到.p_internal_RAM 段就不能放到.p_code段了,因为有些故障信息还是存在PROM中比较好,*(.bss.pmem)这个名称可以自己修改和定义吗? |
|
|
|
|
|
- UID
- 109211
- 性别
- 男
|
*(.bss.pmem)表示随机变量,所以不能存在.p_code段。如果想把故障信息保存,最好是存在data Flash段,所以你要在RAM区开一个故障信息区,仍后定时的把这个区的数据拷贝到Flash区。不过你自己需要写一个Flash编程程序。Freescale 网站上有这样的资料介绍如何用Flash来模拟EEPROM. 你可搜索" Flash Emulation"的资料· |
|
|
|
|
|
- UID
- 105228
- 性别
- 男
|
|
|
|
|
|