看到说大于0xFFFF地址的Flash擦除、读、写时必须用内部定义的函数
头文件<intrinsics.h>中的如下函数
__intrinsic void __data20_write_char (unsigned long __addr,
unsigned char __value);
__intrinsic void __data20_write_short(unsigned long __addr,
unsigned short __value);
__intrinsic void __data20_write_long (unsigned long __addr,
unsigned long __value);
__intrinsic unsigned char __data20_read_char (unsigned long __addr);
__intrinsic unsigned short __data20_read_short(unsigned long __addr);
__intrinsic unsigned long __data20_read_long (unsigned long __addr);
是用这几个函数么?为什么没有擦除的。如果写函数是擦除之后再写的话,最小不是擦除512B么。
求实现方法
user4015270:
我只知道FLASH擦除是分扇区擦除的,只要擦除扇区任何一个字节,整个扇区都会被擦除的。
xiaohui Li:
回复 user4015270:
FLASH分段擦除,扇区擦除,和全部擦除。
xiaohui Li:
回复 灰小子:
非常感谢,当我定义char* p = 0x12000;时发现指针不能指向大于0xFFFF的地址,修改成大地址模式解决。
同理就能对FLASH操作了。