打印

惭愧,无意中发现的89s51的内部看门狗

[复制链接]
3641|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sassos|  楼主 | 2011-1-27 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了个小项目,处理芯片选择的是TQFP44的89s51,电路设计完后板子都已加工回来,客户提出要增加些新的功能,新增的某个功能在程序处理时可能会在等待外部信号时出现死循环,外部信号完全取决于用户的动作,所以加入看门狗监视是比较好的措施了.
  问题是板子已定型,没有外部看门狗复位电路,一直认为简单的51是不会有内部看门狗的(再次惭愧),只好暂时把那外部信号放在中断中处理,并加入了些对SP指针的操作以防止死循环,调试中对这种偏门方法始终不太舒服,无意看了下s51的芯片资料,第一页赫然写着有WDT AND DPTR,看过WDT的介绍和使用后,再配合T0定时延长下狗的监视时间,以下是启动狗的指令:
             mov       WDTRST,#0x1e
             mov       WDTRST,#0xe1
  虽然很多项目中都使用了51核mcu+CPLD/FPGA处理模式,但是对基本的s51这个功能的忽视,让我觉得真的很惭愧,CPLD也好,ARM7/9也罢,失去了对s51这些基本芯片的耐心掌握,这种浮躁的心态正是开发设计中的最大障碍.

相关帖子

沙发
ayb_ice| | 2011-1-27 15:30 | 只看该作者
谁叫你不看手册的

使用特权

评论回复
板凳
yewuyi| | 2011-1-27 15:33 | 只看该作者
--------------------------------------------------------------------------------------
新增的某个功能在程序处理时可能会在等待外部信号时出现死循环,外部信号完全取决于用户的动作,所以加入看门狗监视是比较好的措施了.
--------------------------------------------------------------------------------------

感觉有点荒唐,恐怕你的设计方案有缺陷。

使用特权

评论回复
地板
sassos|  楼主 | 2011-1-27 15:48 | 只看该作者
呵呵 必须等待判断外部信号出现一个连续高低电平变化 否则不能进行其他动作
敢问 阁下不荒唐的处理思路?

使用特权

评论回复
5
wljs012| | 2011-1-27 16:25 | 只看该作者
main不就是个死循环吗?

使用特权

评论回复
6
yewuyi| | 2011-1-27 16:37 | 只看该作者
呵呵 必须等待判断外部信号出现一个连续高低电平变化 否则不能进行其他动作
敢问 阁下不荒唐的处理思路?
sassos 发表于 2011-1-27 15:48



你用看门狗唤回程序返回到初始化状态后,代码会执行什么任务!?假设该任何为A

再假设判断外部信号的任务为B

你难道没有办法让代码在检查B任务未完成前,禁止执行任务A ,B任务完成后,执行A或者其他任务吗!?

为何需要通过死循环后的看门狗溢出这种不可思议的方法来解决自己的问题?

对于看门狗来说,顾名思义,是用来看门护家的最后一道防线,最好不要拿它做你切换任务的工具。

使用特权

评论回复
评分
参与人数 3威望 +3 收起 理由
happde + 1
123jj + 1
心静自然凉 + 1
7
chunyang| | 2011-1-27 22:23 | 只看该作者
做设计前,器件手册一定要仔细看看,俺从来不记器件的具体规格参数什么的,拿很多公司的面试题让我来做,我很可能不看资料就答不上来,但我每次动手前肯定要看手册,不论用没用过,这样觉不会出错,习惯非常重要。

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
happde + 1
123jj + 1
8
lfc315| | 2011-1-27 23:57 | 只看该作者
大侠的这个习惯好。。

使用特权

评论回复
9
心静自然凉| | 2011-1-28 08:00 | 只看该作者
:handshake看了LZ的帖子我也才注意到s51有看门狗
等待外部信号时出现死循环

能否优化设计更好的程序来更有效的防止这种情况的发生?

使用特权

评论回复
10
c126| | 2011-1-28 08:13 | 只看该作者
搞不明白为什么非要等待死循环。

使用特权

评论回复
11
ssy250| | 2011-1-28 08:24 | 只看该作者
我也吃过忽略手册的亏,即使是相当熟悉的元器件,长时间不用,也会忽略一些细节。

使用特权

评论回复
12
foolkun| | 2011-1-28 08:54 | 只看该作者
强烈支持6楼!
楼主把程序设计成状态机,就不会有你说的问题了。

使用特权

评论回复
13
rockli| | 2011-1-28 12:02 | 只看该作者
"新增的某个功能在程序处理时可能会在等待外部信号时出现死循环,外部信号完全取决于用户的动作,所以加入看门狗监视是比较好的措施了.
"

无语

使用特权

评论回复
14
123jj| | 2011-1-28 15:32 | 只看该作者
要想成为高手,必须要养成一个良好的习惯,建议菜友多参考参考春阳老师的方式方法,这种思维,这种方式方法,成就了要么不做,做一定会做出精品。

使用特权

评论回复
15
sassos|  楼主 | 2011-2-18 10:18 | 只看该作者
呵呵 诸位的评论和建议 无非是队列管理
6楼所说的队列管理 判断外部信号(任务B)完成后 再去其它任务 你考虑到如果此外部信号一直无效 而另一任务也需要执行的情况了么 (而开始的要求是 若信号无效 则其他任务不能执行) 这就是后来增加了需求的矛盾所在
12楼 状态机 呵呵 能用单级单维处理掉的 何必要用多维呢 简单才最有效
14楼 呵呵 良好习惯的养成是自己在平时开发工作中的不断总结 实际动手经历的远比参考某某有效果
实际上这个项目中使用了看门狗 只是起了个超时判断跳出的作用 只不过懒得在判断信号的时候再加几个超时标志跳转标志罢了

使用特权

评论回复
16
sassos|  楼主 | 2011-2-18 10:24 | 只看该作者
7楼的说教小弟拜受了 再次惭愧下 往往是复杂点的芯片先看手册 而忽略了自以为熟悉的芯片 惭愧

使用特权

评论回复
17
佛山技术人| | 2011-2-18 11:37 | 只看该作者
惭愧,你都会做项目已不错了,不知道我什么时候可以也有得做,菜鸟来学习了。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

69

帖子

1

粉丝