引用: 引用 9 楼 schlafenhamster 的回复:
利用指针你可以读写任何数据,如:
int? x = *((int*)PageIndices[0]);
PageIndices只是指向了 存储页 读写过程 是在PageIndices指向的存储页上发生的
例程给出的写程序 就已经利用了2个指针了 你的方法行不通
void Page_Write(BYTE* PageAddress) small
{
BYTE EA_Save; // Used to save state of global interrupt enable
BYTE xdata *pwrite; // Write Pointer
BYTE xdata *pread; // Read Pointer
UINT x; // Counter for 0-512 bytes
pread = (BYTE xdata *)(TempStorage);
EA_Save = EA; // Save EA
EA = 0; // Turn off interrupts
pwrite = (BYTE xdata *)(PageAddress);
PSCTL = 0x01; // Enable flash writes
for(x = 0; x
{
FLKEY = 0xA5; // Write flash key sequence
FLKEY = 0xF1;
*pwrite = *pread; // Write data byte to flash
pread++; // Increment pointers
pwrite++;
}
PSCTL = 0x00; // Disable flash writes
EA = EA_Save; // Restore EA
}
刚才设想是在单片机里存储是按ASC码方式 然后 我从外部输入了一个“1”然后读取数据,根据1的ASCiI码为31判断(忽略高地位问题) 在0x2200的首地址可能存储数据为 3 而后存储了1于是进行如下编程验证
结果失败
void read(void)
{
char temp[2];
BYTE xdata *pwrite;
pwrite = (BYTE xdata *)(PageIndices[0]);
if(pwrite==0x2200)
{
Led1=1;
Led2=0;
}
temp[1] =&pwrite[1];
pwrite++;
if(temp[1] == '1')
{
Led1=0;
Led2=1;
}
}