vola
tile static uint32_t Addr_Reserved = 0X0800E000 ;
__disable_irq ();//关中断
FLASH_Unlock(); //解锁写保护
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
FLASHStatus = FLASH_ErasePage(Addr_Reserved );
FLASHStatus = FLASH_ProgramWord( Addr_Reserved , 0x12345678);
FLASH_Lock();//上锁写保护
__enable_irq ();
现象:
1、擦除完 flash,写入新的数据(0X12345678),再读出来都正常,程序也能正常运转。
当断电以后,重新上电,整个程序都不运行了,没任何反应。
2、如果不擦除, 直接写入,写入正常,程序运转也正常, 重新启动上电也运转正常
但是不能第二次写入了,因为数据不再是0XFF的原因吧。
问题应该发生在erase的过程当中。但是不知道哪里出错了
这是编译完的大小
Program Size: Code=34370 RO-data=22986 RW-data=4444 ZI-data=2996
这是map文件的尾部数据,我是操作的尾部没有代码的地方的。在0x0800e000 我定义的是一个const常量,
0x08009766 0x00000490 Data RO 1008 .constdata bmp_icon.o
0x08009bf6 0x00000200 Data RO 1072 .constdata mbcrc.o
0x08009df6 0x00000028 Data RO 1365 .constdata c_w.l(_printf_hex_int.o)
0x08009e1e 0x00000011 Data RO 1395 .constdata c_w.l(__printf_flags_wp.o)
0x08009e2f 0x00000001 PAD
0x08009e30 0x00000094 Data RO 1617 .constdata c_w.l(bigflt0.o)
0x08009ec4 0x00000063 Data RO 1087 .conststring mbrtu.o
0x08009f27 0x00000001 PAD
0x08009f28 0x00000044 Data RO 1167 .conststring mbascii.o
0x08009f6c 0x00000020 Data RO 1749 Region$$Table anon$$obj.o
0x08009f8c 0x0000001c Data RO 1645 locale$$data c_w.l(lc_numeric_c.o)
0x08009fa8 0x00004058 PAD
0x0800e000 0x0000000c Data RO 639 .
ARM.__AT_0x0800E000 Reserved_Data.o//此处我定义了三个 const unsigned int 常量在这个位置,前后都没有东西的。
而你要写入的地址是0x0800E000 ,你自己 看会不会出问题呢?
所以你要写的地址要在0x0800F200以后,才不会出错。
0x08009bf6 0x00000200 Data RO 1072 .constdata mbcrc.o
0x08009df6 0x00000028 Data RO 1365 .constdata c_w.l(_printf_hex_int.o)
0x08009e1e 0x00000011 Data RO 1395 .constdata c_w.l(__printf_flags_wp.o)
0x08009e2f 0x00000001 PAD
0x08009e30 0x00000094 Data RO 1617 .constdata c_w.l(bigflt0.o)
0x08009ec4 0x00000063 Data RO 1087 .conststring mbrtu.o
0x08009f27 0x00000001 PAD
0x08009f28 0x00000044 Data RO 1167 .conststring mbascii.o
0x08009f6c 0x00000020 Data RO 1749 Region$$Table anon$$obj.o
0x08009f8c 0x0000001c Data RO 1645 locale$$data c_w.l(lc_numeric_c.o)
0x08009fa8 0x00004058 PAD
0x0800e000 0x0000000c Data RO 639 .ARM.__AT_0x0800E000 Reserved_Data.o//此处我定义了三个 const unsigned int 常量在这个位置,前后都没有东西的。
其实,我是指定地址,在0X0800E000上定义了一个const常量,然后我的flash 也是操作的这个地址
您可以看到,从 0X08009FA8 开始,都是PAD,也就是填充空白的。倒数第二段是没有数据的,
一周热门 更多>