|
楼主 |
发表于 2013-11-12 09:42:52
|
显示全部楼层
本帖最后由 oldbeginner 于 2013-11-12 11:39 编辑
oldbeginner 发表于 2013-11-11 18:39
IFADRH=pageaddr>>8; // 这个页面必须在IAP存储区
IFADRL=pageaddr;
pageaddr是 ...
在IAP中存储非易失性数据,
// IAP 空间分配如下:(31K) ----ASCII转HEX后存储.
// 1.IAP起始页 0x8000 ~ 0xbfff 存储PLC程序 -- 对应PLC 的0x8000~0xbfff 地址共8000步程序空间
// 2.IAP最后一页0 地址 存储 PLC类型标识核实标志 共 1 个字节
// 3.IAP最后一页1 ~ PLCTypeArrayLenMAX 存储 PLC类型标识 共 PLCTypeArrayLen 个字节 PLCTypeArrayLen
// 4.IAP倒数第二页 缓存空间 不许被其他数据占用!
// 5.其他 保留
为什么这样分布还不是很清楚,先看代码,看是否能从中理解空间分布。
// 函数名称: WriteFlash
//FX1N.c
// 功能描述: HEX 转 ASCII
//
// 输 入: unsigned int WriteAddr,unsigned char *Buf,unsigned int WriteLen
//
// 输 出: void
void WriteFlash(unsigned int WriteAddr,unsigned char *Buf,unsigned int WriteLen)
{
unsigned int i;
unsigned char wrdata=0;
for(i=0;i<WriteLen*2;i+=2) // 由原来的每页写512字节,改为每页写256个字节.存储地址不连续; 由原来存储ASCII码格式,改为存储HEX格式.
{
wrdata=asctohex((unsigned char *)(Buf+i));
IAPFlashProgremMode(WriteAddr++,wrdata);
}
}
这里调用了(含有"检查是否写入成功")单字节写入模式,只看代码也比较难理解,画个图看看,
注释中:由原来的每页写512字节,改为每页写256个字节。感觉有问题,因为WriteAddr++,所以还是512个字节,而且还是连续的,反而被存储的内容不连续了。
如果改成i++,Writeaddr+=2,则好像符合1、由原来的每页写512字节,改为每页写256个字节。2、存储地址不连续。
感觉这里源程序的注释和代码不一致。
至于为何要改成256个字节,应该和页面缓冲区有关(由RAM决定),可以猜测MPC82G516的RAM是256字节。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|