OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5980|回复: 21

flash模拟EEPEOM写数据引起看门狗复位的问题;

[复制链接]

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
发表于 2018-1-10 16:05:36 | 显示全部楼层 |阅读模式
5金钱
各位大神,在用FLASH模拟EEPROM的写数据时会引起窗口看门狗复位,我的理解应该是因为在擦除扇区有一个等待的时间,在这个等待的时间这时候没有喂狗,所以导致看门狗复位?那我怎么样才能让在等待的时间时候也同时喂狗呢,用的是HAL库,有没有大神可以帮帮忙,瞅了好久程序了,不知道该怎么改。感谢各路大神。

最佳答案

查看完整内容[请看2#楼]

用中断喂狗。然后操作flash不要太长。别禁止中断太长时间。没其他好办法。总之就是必须不停的喂狗
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-1-10 16:05:37 | 显示全部楼层
用中断喂狗。然后操作flash不要太长。别禁止中断太长时间。没其他好办法。总之就是必须不停的喂狗
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13079
金钱
13079
注册时间
2012-11-26
在线时间
3809 小时
发表于 2018-1-10 16:22:59 | 显示全部楼层
操作之前关狗,操作之后开狗
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-10 16:43:59 | 显示全部楼层
jermy_z 发表于 2018-1-10 16:22
操作之前关狗,操作之后开狗

它的狗关不了,是窗口看门狗啊
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-10 17:21:08 | 显示全部楼层
在对FLASH操作前建一个定时器,在定时器中喂狗,操作完后关闭定时器
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 08:53:57 | 显示全部楼层
jermy_z 发表于 2018-1-10 16:22
操作之前关狗,操作之后开狗

窗口看门狗关不了,
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 08:57:11 | 显示全部楼层
Noctis 发表于 2018-1-10 17:21
在对FLASH操作前建一个定时器,在定时器中喂狗,操作完后关闭定时器

我是在中断里喂的狗,你是说在中断那个不变,然后再加一个定时器,对FLASH操作的时候同时也要喂狗?
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 08:59:33 | 显示全部楼层
正点原子 发表于 2018-1-10 16:05
用中断喂狗。然后操作flash不要太长。别禁止中断太长时间。没其他好办法。总之就是必须不停的喂狗

谢谢原子哥,我是在中断里喂狗的,但是这个操作FLASH的时间在哪里可以设置呢?没找到啊
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-11 09:50:04 | 显示全部楼层
本帖最后由 Noctis 于 2018-1-11 10:10 编辑
郭子 发表于 2018-1-11 08:59
谢谢原子哥,我是在中断里喂狗的,但是这个操作FLASH的时间在哪里可以设置呢?没找到啊

FLASH的烧写、刷除时间你是改变不了的。另外你这个问题不是简单的在中断里喂狗就可以的。本身窗口看门狗用起来就比较麻烦,你要自己算好间隔,不能迟喂也不能早喂。而且最麻烦的是,默认情况下你的中断向量是在FLASH中,当你对FLASH进行写操作时,中断函数是执行不了的,因为写操作期间读不了FLASH。所以你还需要将中断向量移到ram中,中断函数也要放在ram中,否则你的喂狗时间肯定不准。
回复

使用道具 举报

4

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2017-3-11
在线时间
78 小时
发表于 2018-1-11 10:03:09 | 显示全部楼层
不懂啊啊啊啊
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 11:28:03 | 显示全部楼层
Noctis 发表于 2018-1-11 09:50
FLASH的烧写、刷除时间你是改变不了的。另外你这个问题不是简单的在中断里喂狗就可以的。本身窗口看门狗 ...

万分感谢,我试一下吧,之前你说的“在对FLASH操作前建一个定时器,在定时器中喂狗,操作完后关闭定时器”这句话的意思是不是中断那个喂狗不变,然后再加一个定时器,对FLASH操作的时候同时也要喂狗?,,感谢
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 11:31:48 | 显示全部楼层
Noctis 发表于 2018-1-11 09:50
FLASH的烧写、刷除时间你是改变不了的。另外你这个问题不是简单的在中断里喂狗就可以的。本身窗口看门狗 ...

我在FLASH_WaitForLastOperation(FLASH_WAITETIME);                               //等待上次操作完成这个函数里面也进行了喂狗,这个函数就是等待FLASH操作的函数,然后我在这里面加了喂狗函数,也是不行
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-11 14:03:53 | 显示全部楼层
郭子 发表于 2018-1-11 11:28
万分感谢,我试一下吧,之前你说的“在对FLASH操作前建一个定时器,在定时器中喂狗,操作完后关闭定时器 ...

抱歉,之前说的太简单了,你要按我后面说的将中断向量表,以及中断函数移到非FLASH的地方才能正常喂狗。
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-11 14:21:14 | 显示全部楼层
郭子 发表于 2018-1-11 11:31
我在FLASH_WaitForLastOperation(FLASH_WAITETIME);                               //等待上次操作完成 ...

不行是正常的。引用一下官方文档里的话:
During a write operation to the Flash memory, any attempt to read the Flash memory will
stall the bus. The read operation will proceed correctly once the write operation has
completed. This means that code or data fetches cannot be made while a write/erase
operation is ongoing.
上面那句话在F1系列的Programming manual里,其它系列也有差不多的语句。
总之就是在你擦写FLASH的时候,FLASH上的代码、数据你都读不了,也执行不了,所以你那个FLASH_WaitForLastOperation()函数是要等到它擦写完才能执行的,而你等到它擦写完的时候已经错过了喂狗时间了。
当然,ST的某些芯片有多个BANK,那么如果你要执行的代码不在你要擦写的BANK上,那么那些代码还是可以正常执行的。

回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 14:56:01 | 显示全部楼层
Noctis 发表于 2018-1-11 14:21
不行是正常的。引用一下官方文档里的话:
上面那句话在F1系列的Programming manual里,其它系列也有差不 ...

我可不可以这么理解,如果我所需要运行的代码在BANK1,我需要擦写的数据在BANK2,这样的话,看门狗就不会自动复位了?
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 14:57:01 | 显示全部楼层
Noctis 发表于 2018-1-11 14:21
不行是正常的。引用一下官方文档里的话:
上面那句话在F1系列的Programming manual里,其它系列也有差不 ...

谢谢你的回答,万分感谢
回复

使用道具 举报

0

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2016-11-1
在线时间
119 小时
发表于 2018-1-11 16:20:19 | 显示全部楼层
郭子 发表于 2018-1-11 14:56
我可不可以这么理解,如果我所需要运行的代码在BANK1,我需要擦写的数据在BANK2,这样的话,看门狗就不会 ...

这样的话,你的代码可以正常运行,至于看门狗会不会复位得看你的代码怎么写咯
回复

使用道具 举报

15

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
444
金钱
444
注册时间
2017-7-11
在线时间
89 小时
 楼主| 发表于 2018-1-11 17:39:19 | 显示全部楼层
Noctis 发表于 2018-1-11 16:20
这样的话,你的代码可以正常运行,至于看门狗会不会复位得看你的代码怎么写咯

恩恩,谢谢了,
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-11 18:12:14 | 显示全部楼层
操作FLASH进行中,是可以别再狗的.
还有就是不用狗.
有狗麻烦,无狗清静.
回复

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-9-16
在线时间
33 小时
发表于 2020-5-28 15:44:09 | 显示全部楼层
操作系统 发表于 2018-1-11 18:12
操作FLASH进行中,是可以别再狗的.
还有就是不用狗.
有狗麻烦,无狗清静.

在很多场合中不养狗,程序被干扰弹飞了,板子就死机了
回复

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-9-16
在线时间
33 小时
发表于 2020-5-28 16:03:36 | 显示全部楼层
楼主最后是怎么处理的啊?我也遇到这个应用情况,运行过程中需要写flash模拟EEPROM保存数据,结果窗看门狗就咬人了。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2020-5-28 18:15:13 | 显示全部楼层
kaney4115 发表于 2020-5-28 16:03
楼主最后是怎么处理的啊?我也遇到这个应用情况,运行过程中需要写flash模拟EEPROM保存数据,结果窗看门狗 ...

操作FLASH进行中,是可以喂狗,
还有就是一开始就不开启看门狗呀,
另外还可以把看门狗的时间设置长一些.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-1 16:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表