Board logo

标题: FLASH烧写前后的获取值无变化???? [打印本页]

作者: dchuser    时间: 2007-6-20 08:38     标题: FLASH烧写前后的获取值无变化????


请问版主:
我在MC908GP32芯片进行FLASH的擦除和写入操作,其中在包含文件中定义了:
const unsigned int F_address@0x8000 = 8; //故障地址 默认值 =8
在程序文件中有如下代码:
ppp = F_address; //获取变量 F_address 的值
FLASH_erase(0x8000); //FLASH擦除程序
FLASH_write(0x8000,(unsigned char *)GUshuju,2); 写入111
ppp = F_address; //获取变量 F_address 的值

其中程序能够正确擦除和写入(从调试Debug窗口观察),但是在写入后重新获取F_address的还是8,为什么?怎样得到重新写入的F_address的值111???

谢谢!!!谢谢!!!谢谢!!!谢谢!!!谢谢!!!谢谢!!!








作者: strongchen    时间: 2007-6-20 10:06

你是用软件仿真还是硬件运行调试?对FLASH的操作有可能通过调试窗口无法正确观察到。可能FLASH并没有被正确地擦除和写入。
作者: dchuser    时间: 2007-6-20 10:41

我采取的硬件调试,已经正确的写入了,而且是10个字节!
作者: strongchen    时间: 2007-6-20 11:49

已经正确写入了怎么会读不出正确的值?!
作者: dchuser    时间: 2007-6-20 13:57

因为我是用const unsigned int F_address0x8000 = 8; 命令定义F_address常量并赋予8,再次对地址0x8000擦除与写入后,继续引用常量F_address,是不是在擦除和写入时,改变F_address常量的地址?但是从Debug窗口观察,没有!并且我在擦除与写入时未引用F-address常量,只是对地址操作,另我上述程序前后两次访问的F_address的值,方法正确吗?



作者: strongchen    时间: 2007-6-20 14:02

对FLASH进行操作不会影响常量的地址。对FLASH进行操作时直接用地址值也是没问题的。不过你也可以换个地址试试?另外,FLASH有没有块保护?
作者: dchuser    时间: 2007-6-20 14:43

我对0x8000--0x8FFF地址没有块保护,因为要对这些地址进行擦除和写入操作,

版主能在百忙中回复笨人的贴子!不胜感激!!!!!!!

作者: strongchen    时间: 2007-6-20 16:16

如果还是不行,把你的project打包贴出来看看吧。
作者: dchuser    时间: 2007-6-21 09:25

http://bbs.chinaecnet.com/uploadImages/MC908GP32(擦除烧写程序).rar

带★★的部分是出错的简单说明.
作者: strongchen    时间: 2007-6-21 09:54

在上传文件名中最好不要用中文,否则链接有问题。
作者: dchuser    时间: 2007-6-21 13:22

http://bbs.chinaecnet.com/uploadImages/MC908GP32erase_write.rar

带★★的部分是出错的简单说明.
作者: strongchen    时间: 2007-6-21 18:10

问题出在编译器把它优化了,直接用常数进行操作,所以体现不出FLASH内容的变化了。你可以在常数定义前加volatile说明,如下所示:

volatile const unsigned char F_address@(FLASHbaoaddress) = 8;
volatile const unsigned char F_QDtime@(FLASHbaoaddress+1) = 5;
volatile const unsigned char F_Gcircuit@(FLASHbaoaddress+2) = 150;
volatile const unsigned char F_Gnumber@(FLASHbaoaddress+4) = 1;
volatile const unsigned char F_phl@(FLASHbaoaddress+5) = 30;
volatile const unsigned char F_QZcircuit@(FLASHbaoaddress+6) = 250;
volatile const unsigned char F_LXcircuit@(FLASHbaoaddress+8) = 180;
volatile const unsigned char F_Vbfb@(FLASHbaoaddress+10) = 20;

作者: dchuser    时间: 2007-6-22 16:10

非常感谢,程序已经调试通过了,因为我以前使用的MICOROCHIP芯片,转到FREESCALE芯片时间不长,所以遇到的问题比较多,多谢版主对我的赐教,我一定会努力,在FREESCALE芯片
作者: dchuser    时间: 2007-6-22 16:13

上作出一点成绩! 再次感谢版主!!!!!!!!!!!
作者: strongchen    时间: 2007-6-22 16:17

非常高兴能对你有所帮助。你的程序本身写得还是不错的。

[此贴子已经被strongchen于2007-6-22 16:17:29编辑过]


作者: BHLT123    时间: 2009-10-21 16:52

strongchen版主:
我最近也遇到这个帖子出现的问题,不过这边写的是FLASH里面的常量被优化了,我的程序是宏被优化了。
比如:
我定义#defined AD_COUNT 40,然后把AD_COUNT改为64,编译出来还是40;
后来我把程序里面用到这个AD_COUNT宏的地方全部改成64,编译以后再把这些地方还原成AD_COUNT宏,再次编译出来就是64了。

请问,有没有什么方法可以保证宏不被优化呀??




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0