标题: cw语法及flash擦除问题 [打印本页]
作者: zlina 时间: 2006-9-26 12:42 标题: cw语法及flash擦除问题
#define Program_Byte PGM[21]=0x20; temp =((unsigned char(*)(unsigned int, unsigned char))(PGM)),我在文档里面看到这行代码,((unsigned char(*)(unsigned int, unsigned char))(PGM)),但是对这个说明不太理解,请斑竹指点
其中 unsigned char PGM[]; unsigned char temp;
还有个问题,我想问问对gt60进行整体擦除时,整体擦除怎么传递擦除的地址?
[此贴子已经被作者于2006-9-26 12:40:15编辑过]
[此贴子已经被作者于2006-9-26 12:42:04编辑过]
作者: strongchen 时间: 2006-9-26 14:03
哪个文档?
作者: zlina 时间: 2006-9-26 16:28
CW_HCS08_Peripherals_Module_Quick_Reference_UG.pdf
HCS08QRUGSW
这个文档,多指教!
作者: strongchen 时间: 2006-9-26 17:45
这个乍一看是很难理解,其实也不复杂。实际上,它是定义了一个名为Program_Byte的宏,而这个宏包含2个指令:一个指令是将数组PGM的第21个字节写为0x20;另一个指令是将数组PGM作为一个函数的入口地址进行调用。而数组PGM的内容,实际上就是一段对FLASH进行操作的程序的二进制代码。这段程序在数组的下面已经给出。可以看到,这段程序本身是需要参数的,所以在后面调用Program_Byte这个宏时,可以看到给了它两个参数。
作者: zlina 时间: 2006-9-26 19:34
我谈谈我的理解,你帮我分析一下问题在哪里,好吗?
首先执行命令的那段代码,需要参数是flash地址address和写入的数据data,你看那个程序,
1 在进行页擦除时,仅给出了一个地址0xf000参数,数据0xff,并没有给阿,但运行程序看到结果是写进去的全是0xff;
2 在进行字节写入时,给出了一个地址参数,和一个数据参数
疑问:两种情况对应一段程序,这让我有点糊涂?
temp =((unsigned char(*)(unsigned int, unsigned char))(PGM))这个当中,我理解你看哪里有问题,第一个unsigned char表示返回类型,*表示该函数是一个指针类型,函数里面有两个参数,类型分别是unsigned int, unsigned char
疑问:PGM在这里在函数原形当中怎么理解呢?
还有一点,就是我试着将擦写命令换成整体擦除(mass erase),将PGM[21]=0x41,好像没起作用,就是我先写进去数据,然后执行整体擦除,查看存储单元内容,好像没有擦掉!这是什么原因呢?
[此贴子已经被作者于2006-9-26 19:34:27编辑过]
作者: strongchen 时间: 2006-9-27 09:44
第一个问题:
FLASH的擦除状态就是0xFF,不需要数据参数。
作者: strongchen 时间: 2006-9-27 09:51
第二个问题:
在数组PGM所代表的程序中,实际上有两个参数,一个是Address,一个是Date。所以调用它时,可以给它两个参数。但擦除时不需要数据参数,所以只给一个参数也是可以的。当然,若擦除时若要给两个参数,也是可以的,但此时数据参数可以是任意值。
作者: strongchen 时间: 2006-9-27 10:14
第三个问题:
你可以将此宏指令代入调用程序,这样可能更容易理解:
temp = PGM[21]=0x20;
temp =((unsigned char(*)(unsigned int, unsigned char))(PGM))(0xF000+i,i);
PGM就当成是一个函数的入口地址。
作者: strongchen 时间: 2006-9-27 10:31
第四个问题:
整体擦除应该是可以的。不知你的程序什么地方有错,可以贴出来看看。
作者: zlina 时间: 2006-9-27 11:16
我增加了这么一条宏指令#define Mass_Erase PGM[21]=0x41; temp = ((unsigned char(*)(unsigned int))(PGM))
在程序当中最先执行一次整体擦除指令,这样是不成功的
temp = Mass_Erase(0xf600);
if(temp==0xFF){ //出错点亮led5
PTCD_PTCD5=1;
}
我试了先进行页擦除再进行整体擦除也是不成功的
好像是如果未对flash进行过写入数据的操作,是不能进行整体擦除操作的
不知道是什么原因
作者: strongchen 时间: 2006-9-27 11:30
FLASH是否有块保护?
作者: zlina 时间: 2006-9-27 21:13
保护都解除了,有块保护的话,为什么能在写入字节以后,就可以进行整体擦除呢?
作者: seuafu2005 时间: 2006-9-28 10:03
你先进行块擦除,先不要mass-erase呢
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |