使用IAR的__ramfunc定义实现操作FLASH的程序,发现0x9000的地址可以编程(0x9000不是代码区),而0x8100地址就不可以(0x8100在代码区),不知道是什么原因,代码如下:
__ramfunc void UpdateApp(void)
{
u8 i;
FLASH_PUKR = 0x56;
asm("nop");
FLASH_PUKR = 0xae;
asm("nop");
while(!(FLASH_IAPSR & 0x02));
for (i = 0; i < 128; i += 4)
{
FLASH_CR2 |= (u8)0x40;
FLASH_NCR2 &= (u8)~0x40;
*(((__far unsigned char *)0x8100) + i) = 0x5a;
asm("nop");
*(((__far unsigned char *)0x8100) + i + 1) = 0x5a;
asm("nop");
*(((__far unsigned char *)0x8100) + i + 2) = 0x5a;
asm("nop");
*(((__far unsigned char *)0x8100) + i + 3) = 0x5a;
asm("nop");
while(!(FLASH_IAPSR & 0x05));
}
while(1);
} |