yangxuezhi 发表于 2017-7-26 15:14:25

stm32f407,内部Flash被改的问题

STM32F407ZET6,使用内部Flash 作为存储,使用时发现程序会异常,读出内部Flash后发现,正常的和非正常的文件,在0X08000000处前8个字节不同,具体如图所示。
程序中对FLash操作的地方,处于0X08040000,并没有对0X08000000,这两个位置处于不同的FLash段空间,相互之间毫无瓜葛,好难分析出原因{:sad:}

maoxue121225 发表于 2017-7-26 17:04:24

这个问题比较高深没有遇到过,最好能实时监测一下什么时间哪个程序对他有修改。

farmerzhangdl 发表于 2017-7-26 18:01:26

越界了被覆写了吧

XUEPENGBIN 发表于 2017-7-26 18:15:39

楼上说得对,是数据越界了。。自动回到了800000地址

1a2b3c 发表于 2017-7-26 23:33:16

除了你的程序问题,别的没有问题了,哈哈

Flyback 发表于 2017-7-27 14:12:34

0X08000000 是 stm32 flash 的首地址,看下你写 flash 的地址操作吧

yangxuezhi 发表于 2017-7-28 12:20:47

Flyback 发表于 2017-7-27 14:12
0X08000000 是 stm32 flash 的首地址,看下你写 flash 的地址操作吧

程序内 没有对此段Flash 进行操作

yangxuezhi 发表于 2017-7-28 12:23:20

farmerzhangdl 发表于 2017-7-26 18:01
越界了被覆写了吧

407的FLASH 一个段最少是16K,最大是128K,此段处于FLASH头,我操作的段处于FLASH尾(128K),怎么都不可能越界的,何况,对FLASH操作时先擦除后写入,怎么可能此段只有8个字节被改变,其余都没有变呢

farmerzhangdl 发表于 2017-7-28 17:15:50

我是说是不是你的局部变量的大小比实际的要写,所以越界了导致写的地址变化了

myxiaonia 发表于 2017-7-30 20:54:51

把程序部分flash设置成写保护

Azuresky 发表于 2017-8-8 06:40:23

检查程序是否发生了堆栈溢出。或者直接加大堆栈,看是否还会发生此现象。

Azuresky 发表于 2017-8-8 06:44:32

还有可能是指针被冲毁清零,然后向指针指向的地址空间写零。0x08000000被重定向到了0x00000000地址。

mon51 发表于 2017-8-8 08:52:13

yangxuezhi 发表于 2017-7-28 12:20
程序内 没有对此段Flash 进行操作

在你的程序FLASH iap 时,请检测地址范围。

ziho2005 发表于 2023-11-13 11:30:52

问题解决了没 ,我也遇到了一样的问题
页: [1]
查看完整版本: stm32f407,内部Flash被改的问题