4556|6

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助Flash读写中遇到的问题 [复制链接]

各位好!
我现在在做一种流量计项目,用MSP430F149做,现在数据到Flash保存和读取遇到了问题,UnDataW和RUnDataW内容不一样,以下是相关程序,请大家帮看看:

unsigned char UnDataW[N_Un]={0,0,0,0,0,0,0,0};//Flash
unsigned char RUnDataW[N_Un]={0,0,0,0,0,0,0,0};
const unsigned char *piq0=UnDataW;
unsigned char q0;
unsigned int iq1,iq2;
/***************************************************************************
段擦除
adr:要擦除的段内的任一地址
***************************************************************************/
void FlashErase(unsigned int adr) @ "MYSET"
{
unsigned char *p0;
FCTL1=FWKEY+ERASE;
FCTL2=FWKEY+FSSEL_1+FN1+FN3;//10分频,400KHZ;选MCLK4MHZ
FCTL3=FWKEY; //解锁
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
p0=(unsigned char *)adr;
*p0=0; //向段内地址任意写,启动擦除操作
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
}

/**************************************************************************
字节编程
Adr:要编程的地址,注意:不是指针类型,应当是偶地址
UnDataW:要编程的字
**************************************************************************/
void FlashWB(unsigned int Adr,unsigned char UnDataW) @ "MYSET"
{
FCTL1=FWKEY+WRT;
FCTL2=FWKEY+FSSEL_1+FN3+FN1;//10分频,400KHZ
FCTL3=FWKEY;
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
*((unsigned char *)Adr)=UnDataW;
while((FCTL3&BUSY)==BUSY) //等待FLASH存储器完成操作
;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;

}
/**************************************************************************
系数保存到Flash程序
Adr:指向要编程的Flash地址,注意:不是指针类型
UnUnDataB:要编程的字节
**************************************************************************/
void UnWZCXS()//系值保存程序,将各位缓冲变量保存到相应位的最终变量
{
RUnDataW[7]=Un14W;
RUnDataW[6]=Un13W;
RUnDataW[5]=Un12W;
RUnDataW[4]=Un11W;
RUnDataW[3]=Un10W;
RUnDataW[2]=Un9W;
RUnDataW[1]=Un8W;
RUnDataW[0]=Un7W;
for(q0=0;q0<N_Un;q0++)
{
//ReadFlashW(iq1,*piq0);
UnDataW[q0]=RUnDataW[q0]; //

}
}

void UnWFlash()
{
FlashErase(FLASHD_UnADR); //段擦除
iq1=FLASHD_UnADR;
_NOP();
for(q0=0;q0<N_Un;q0++)
{
FlashWB(iq1,*piq0); //将设置参数Un存入Flash中
iq1++;
piq0++;
}
}
////////////////////////////////////////////////////////////////////////

void UnQZ()//系数从Flash转存到系数显示缓存变量
{
piq0=(unsigned char *)FLASHD_UnADR;
//const unsigned int *piq0=UnDataW;//指针指向数组UnDataW
for(q0=0;q0<N_Un;q0++)
{
//ReadFlashW(iq1,*piq0);
RUnDataW[q0]=*piq0;
piq0++;
}
}

最新回复

我没有太仔细看你的程序◎但是我感觉FLASH在写程序的时候!好像要先擦除!也就是给0发给那个地址!然后再写程序!  详情 回复 发表于 2008-4-1 23:45
 
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我遇到的情况是 读和写时 地址不一致
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我现发现好像没写进去,任就是初始值,读出的是乱码.察写程序基本是书上的,不知是那出了问题造成的,请帮看一下可是程序上的问题?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
我每次都全部擦除,全部写入  
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
请问进行flash操作时,在编译设置中有何特别的设置?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
请问将一数组DataB写到flash中,是否在DataB前一定加const ,我试了将const去掉,结果一样,想问去掉const 可有何后果?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
我没有太仔细看你的程序◎但是我感觉FLASH在写程序的时候!好像要先擦除!也就是给0发给那个地址!然后再写程序!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表