工具/软件:Code Composer Studio
大家好,
关于信息存储器。存储器是字节可寻址的(我想是)
它有4个数据段,每个数据段有64个字节(总共256个字节)。
它以地址0x1000 (段D)开头。 因此,如果 我在此地址中输入一个字符(字节大小),则下一个可用的地址是0x1001
如果之后我输入一个短(2个字节),则下一个可用地址是 0x1003
如果我说的是正确的,那么为什么我下面的代码不能正常工作?
#include <msp430g2553.h>
#define end_of_flash 0x0FFFF
void WriteCharToFlash(Char Flashptr,char val);
void WriteLongToFlash(Long* Flashptr,Long val);
void ReadCharFromFlash(Char地址, CHAR* val);
void ReadLongFromFlash (Long*地址,Long* val);
void ClearAllFlash();
int main (void){
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALC1_1MHz; //将DCO设置为1MHz
DCOCTL = CALDCO_1MHz;
FCTL2 = FWKEY + FSSEL0 + FN1;
长val;
char val2;
ClearAllFlash();
WriteCharToFlash((Char *) 0x0.1万, '2');
ReadCharFromFlash((Char *) 0x0.1万,&val2);
WriteLongToFlash((((Long*) 0x0.1001万, 123.4567万);
ReadLongFromFlash((Long*) 0x0.1001万,&val);
ReadLongFromFlash((Long*) 0x0.1001万,&val);
ReadCharFromFlash((Char *) 0x0.1万, &val2);
返回0;
}
void WriteLongToFlash(long* address, long val)
{
long* flash_ptr;
flash_ptr =地址;//初始化Flash指针
FCTL1 = FWKEY + erase; //设置擦除位
FCTL3 = FWKEY; //清除锁定位
*FLASH_PTR =0;
WHITE(FCTL3 & BUSY);
FCTL1 = FWKEY + WRT;
*FLASH_PTR = val;
WHITE(FCTL3 & BUSY);
FCTL1 = FWKEY; //清除WRT位
FCTL3 = FWKEY + LOCK; //设置锁定位
}
void ReadLongFromFlash(long* address,long* val)
{
long* flash_ptr;
flash_ptr =地址;
*val =*flash_ptr;
}
void WriteCharToFlash(Char地址,char val)
{
char* flash_ptr;
flash_ptr =地址;//初始化Flash Pointer
FCTL1 = FWY + erase; //设置擦除位
FCTL3 = FWKEY; //清除锁定位
*FLASH_PTR = 0;
FCTL1 = FWKEY + WRT;
*FLASH_PTR = val;
FCTL1 = FWKEY; //清除WRT位
FCTL3 = FWKEY + LOCK; // set lock bit
}
void ReadCharFromFlash(Char* address, char* val)
{
char* flash_ptr;
flash_ptr =地址;
*val =*flash_ptr;
}
void ClearAllFlash()
{
char *flash_ptr; //段D指针
flash_ptr =(char *) 0x1000; //初始化闪存段D指针
FCTL1 = FWKEY + MERAS; //设置大量擦除位
FCTL3 = FWKEY; //清除锁定位
*FLASH_PTR =0; //虚拟写入以擦除闪存段D
FCTL1 = FWKEY + WRT; //设置写入操作的WRT位
FCTL1 = FWKEY; //清除WRT位
FCTL3 = FWKEY + LOCK;
}