音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

為何一般不建議在中斷中喂狗?

作者:真水無香 欄目:單片機
為何一般不建議在中斷中喂狗?
在網(wǎng)站中看到很多大俠的帖子,都是建議不要在中斷程序中喂狗,小弟不知其中緣由?
我的程序流程是這樣的
程度首先初始化,在初始化中打開看門狗(使用GCC)
wdt_reset();
wdt_enable(WDTO_2S);
然后進入while循環(huán)

在RTC秒中斷中喂狗
wdt_reset();

不知,這樣有何缺陷,請各位幫忙提提看法,謝謝

順便問一下
關(guān)看門狗使用一下語句可以嗎?
wdt_reset();
wdt_disable();

2樓: >>參與討論
apad
程序跑飛了可是中斷不一定會死
假如主程序跑飛了,陷在某處,可是中斷正常,比如定時器,這時應(yīng)該看門狗復(fù)位才是,可是……

3樓: >>參與討論
NE5532
白喂
 
4樓: >>參與討論
hanyafeng
就是
請在運行等級最低的程序中喂狗,一般是主程序中。系統(tǒng)中,我認為一般是定時器中斷響應(yīng)程序,因為它是最經(jīng)常運行的部分,其他進程都是在時隙中運行。

5樓: >>參與討論
computer00
狗在外面有吃的了,它回到家之后還會餓嗎?
 
6樓: >>參與討論
pheavecn
赫赫,我都是中斷中喂。
但是中斷中喂狗前會檢測一個主程序設(shè)置的標志。
這樣保證兩個都不死。

7樓: >>參與討論
hotpower
還是pheavecn和菜農(nóng)的狗論相同呀
"程序跑飛了可是中斷不一定會死"

為什么不想:"中斷中喂狗前會檢測一個主程序設(shè)置的標志"

8樓: >>參與討論
pheavecn
這個叫“連坐”。
 
9樓: >>參與討論
hotpower
哈哈,何處喂狗不要緊,關(guān)鍵要"雙向應(yīng)答"...
 
10樓: >>參與討論
computer00
那還不是一樣了…………既然要設(shè)置標志,還不如去喂狗……
等于說,告訴鄰居,你要記得幫我喂狗噢……如果有一天沒有告訴鄰居,那么狗就回來咬主人了……

11樓: >>參與討論
hotpower
再駁"主程序喂狗論"
主程序活著比死了更難受!!!

所以沒有"雙向應(yīng)答"機制的主程序強喂狗方式還是有漏洞的.

由于中斷被無意關(guān)斷,那么主程序?qū)嶋H就只干傻喂狗功能,這種不工作也不死的

程序要它何用???

所以我喜歡在主循環(huán)內(nèi)刷新中斷標志,即再次打開自己所需的全部中斷.

在主循環(huán)內(nèi)判中斷進入標志(或中斷進入次數(shù))再喂狗.

或在主循環(huán)內(nèi)設(shè)置主循環(huán)內(nèi)駐留標志(表示中斷是從主循環(huán)跳入的),再在中斷中

"主程序不飛可是中斷被關(guān)斷"將會如何???

一般是定時中斷(或OS的節(jié)拍中斷)中喂狗,因為這種喂狗發(fā)生喂狗時間恒定,狗不得胃病.

中斷中喂狗后清除那個主循環(huán)內(nèi)駐留標志,這樣:

1.如果主程序飛,則定時中斷照常工作時,將收不到那個主循環(huán)內(nèi)駐留標志,則不喂狗(硬件看門狗),若無硬件看門狗,則定時中斷數(shù)次后,強行軟件復(fù)位!!!(起到了軟件看門狗的作用)

2.若主程序不飛,且主循環(huán)強制刷新中斷標志,一般都能定時中斷,即使不能中斷,

則系統(tǒng)得不到喂狗,則硬件看門狗動作,系統(tǒng)復(fù)位.

從上2種情況分析,中斷喂狗的好處還能兼職軟件看門狗的作用!!!

12樓: >>參與討論
hotpower
"狗在外面有吃的了,它回到家之后還會餓嗎?"---回復(fù)00
狗吃肉的時候必須有主人在家中(主程序)的令牌,否則貪吃是會誤大事的.

好狗肯定會在沒得到令牌(主人已被敵人干倒)時,自盡殉葬主人的.

就像人酒后駕車一樣的道理.

13樓: >>參與討論
hotpower
"中斷喂狗論"更能掌控"程序制空權(quán)"
在"主程序喂狗論"中,最"強有的理論依據(jù)"就是---"程序跑飛了可是中斷不一定會死"

而"中斷喂狗論"恰恰就是利用了這個"理論依據(jù)"!!!

中斷一般都有自己固定不變的中斷向量地址,這樣即使主程序飛,中斷也能正確地跳入自己的軌道繼續(xù)運行.

如果每個其他事件即程序模塊都設(shè)置一個"執(zhí)行標志",即執(zhí)行過后都設(shè)置此標志.

那么,在定時(節(jié)拍)中斷中,可以從這些"執(zhí)行標志"掌握程序的運行狀況,達到檢控的目的.

若全部模塊正常運行,則清除全部標志,否則,進行硬件復(fù)位(不喂狗)或軟件復(fù)位(在沒硬件看門狗時或需要立即復(fù)位時).

由于各模塊的運行周期不定,喂狗中斷可以靈活掌握.

"中斷喂狗論"和"主程序應(yīng)答喂狗論"(不同于亂喂)效果基本相同,都能達到同樣的目的,但是它的喂狗周期不定,在低功耗的系統(tǒng)中,主循環(huán)的喂狗檢測較耗電.
而且主循環(huán)飛后只能期待硬件看門狗的復(fù)位了,故一般用在有硬件看門狗的系統(tǒng)中.而前者可用于有無硬件看門狗的系統(tǒng)中(當(dāng)然要保證定時器及中斷不能被關(guān)閉,一般在主循環(huán)中刷新中斷配置較好).

當(dāng)然,"中斷喂狗論"要耗損一些在中斷中的時間,但在定時(節(jié)拍)中斷中,是很短暫的,基本不影響系統(tǒng)的性能.

14樓: >>參與討論
BitFu
支持中斷中喂狗.
 
15樓: >>參與討論
hotpower
BitFu的書不錯
我給徒弟買了本讓他自學(xué)...

16樓: >>參與討論
tinytony
提醒一下
外部時鐘或CRYSTAL是可能變慢或停止的,主人沒死,狗可是要關(guān)門的.

17樓: >>參與討論
hotpower
外部時鐘變慢主人在也無用
一般喂狗都是秒級的,主頻變慢也有間接測試的方法.

假使ADC或PWM及RTC等這些有規(guī)律的實踐,中斷的次數(shù)也可以等效為恒定的時鐘發(fā)生器.

用它與系統(tǒng)時鐘比對,就可間接地"測試"出系統(tǒng)時鐘的快慢.

否則,內(nèi)部RC振蕩器自動調(diào)節(jié)從何而來???

18樓: >>參與討論
AIRWILL
hotpower 的中斷喂狗論很精彩.
只是,在 OS 中,應(yīng)該為所有主人服務(wù),如何識別 某個任務(wù)較長時間的 standby mode .
一個主人增加多個標志嗎? 但有會出現(xiàn)標志相互矛盾.

19樓: >>參與討論
hotpower
牧犬人沒這兩下如何耍大刀
哈哈...搞產(chǎn)品和教學(xué)不一樣...

20樓: >>參與討論
maoqichun
主程序常有,中斷不常有
    有很多中斷是在主程序的控制下根據(jù)需要才開放的,并非開機就開中斷,定時器中斷也是如此.

21樓: >>參與討論
hotpower
一般程序都有"節(jié)拍",所以狗論是比較通用的
 
22樓: >>參與討論
hongyang01
學(xué)習(xí)中
 

* - 本貼最后修改時間:2006-3-5 20:20:25 修改者:hongyang01

23樓: >>參與討論
pjzhao
精彩
 
24樓: >>參與討論
sky134579
好好學(xué)習(xí)!向大俠看齊!
 
25樓: >>參與討論
yewuyi
我認為不需要搞那么復(fù)雜
主程序中清狗,并不斷刷新中斷狀態(tài)字也沒多大問題,現(xiàn)在不帶內(nèi)部看門狗的MCU好象越來越少了。
在主程序中設(shè)置令牌,到中斷中清狗固然很好,但主程序中各級子程序都需要有相應(yīng)標志,我個人認為這大大增加了設(shè)計復(fù)雜度,還是簡單一點才好,沒必要搞的那么復(fù)雜……

26樓: >>參與討論
raidy_liu
重要的是讓狗成為真正的看門狗
其實程序中如何喂狗,要根據(jù)具體的程序流程,沒有千篇一律的,只是要把握一個原則:讓狗成為真正的看門狗

27樓: >>參與討論
chenlr217
喂狗理論
 
28樓: >>參與討論
yewuyi
BitFu出什么書了?
 hotpower 發(fā)表于 2006-3-4 10:45 AVR 單片機 ←返回版面    

BitFu的書不錯

我給徒弟買了本讓他自學(xué)...




29樓: >>參與討論
fungvy
主程序死掉了,但中斷可能依然還活著
奉上周航慈老前輩的一片文章,讓大家了解“主程序死掉了,但中斷可能依然還活著”的道理。




MCS51系列單片機軟件抗干擾技術(shù)中的誤區(qū) 

   作者:周航慈   

  
    摘要:文章指出了一種廣泛流傳的誤解:在MCS-51系列單片機中,只要用指令使程序從起始地址開始執(zhí)行,就可以復(fù)位單片機,擺脫干擾。通過一個簡單的實驗,揭示了軟件復(fù)位的可靠方法。

    有的單片機(如8098)有專門的復(fù)位指令,某些增強型MCS-51系統(tǒng)單片機雖然沒有復(fù)位指令,但片內(nèi)集成了WATCHDOG電路,故抗干擾也不成問題。而普及型MCS-51系列單片機(如80318032)既然無復(fù)位指令,又不帶硬件WATCHDOS,如果沒有外接硬件WATCHDOG電路,就必須采用軟件抗干擾技術(shù)。常用的軟件抗干擾技術(shù)有:軟件陷阱、指令冗余、軟件WATCHDOG等,它們的作用是在系統(tǒng)受干擾時能及時發(fā)現(xiàn),再用軟件的方法使系統(tǒng)復(fù)位。所謂軟件復(fù)位就是用一系列指令來模仿復(fù)位操作,這就是MCS-51系列單片機所特有的軟件復(fù)位技術(shù)。
    現(xiàn)用一簡單的實驗說明,實驗電路如附圖所示。接于仿真插座P1.0的發(fā)光二極管LED0用來表示主程序的工作情況,接于P1.1的發(fā)光二極管LED1用于表示低級中斷子程序的工作情況,接于P1.2的發(fā)光二極管LED2用來表示高級中斷子程序的工作情況,接于P3.2口的按鈕用來設(shè)立干擾標志,程序檢測到干擾標志后故意進入死循環(huán)或掉進陷井,模仿受干擾的情況,從而檢驗各種復(fù)位方法的實際效果。初始化程序如下:

             ORG  0000H
STAT:        LJMP MAIN               ;復(fù)位入口地址

             ORG  0003H     
             LJMP PX0                ;按鈕中斷向量(低級中斷)
             ORG 000BH
             LJMP PT0                ;T0中斷向量(低級中斷)
             ORG 001BH
             LJMP PT1                ;T1中斷向量(高級中斷)


             ORG 0030H
MAIN:       CLR EA
             MOV SP,#7
             MOV P1,#0FFH
             MOV P3,#0FFH
             MOV TMOD,#11H
             CLR 00H                  ;干擾標志初始化
             SETB ET0
             SETB ET1
             SETB EX0
             SETB PT1
             SETB TR0
             SETB TR1
             SETB EA
LOOP:        CPL P1.0                 ;主程序發(fā)光二極管LED0閃爍
             MOV R6,#80H
             MOV R7,#0
TT1:         DJNZ R7,TT1
             DJNZ R6,TT1
             SJMP LOOP


PX0:         SETB 00H                 ;設(shè)立干擾標志,模擬發(fā)生干擾
             RETI

PT0:         CPL P1.1                 ;低級中斷程序發(fā)光二極管LED1閃爍
             RETI

PT1:         CPL P1.2                 ;高級中斷程序發(fā)光二極管LED2閃爍
             RETI
    

             END

實驗步驟如下:

1. 按上述程序啟動執(zhí)行,三個發(fā)光二極管都應(yīng)閃爍(否則應(yīng)先排除故障),表示主程序和各中斷子程序正常。因模擬干擾標志未加檢測,故不受按鈕影響。

2. 修改主程序如下,按下按鈕后主程序即掉入死循環(huán)中。

LOOP: CPL P1.0
      MOV R6,#80H
      MOV R7,#0H
TT1:  DJNZ R7,TT1
      DJNZ R6,TT1
      JNB 00H,LOOP       ;受干擾否?
STOP:LJMP STOP          ;掉入死循環(huán)。

這時可以看到,主程序停止工作(LED0停止閃爍),而兩個中斷子程序繼續(xù)運行(LED1和LED2繼續(xù)閃爍)。

3. 將定時器T1用作軟件WATCHDOG,將30H單元用作軟件WATCHDOG計數(shù)器。主程序中加入一條復(fù)位軟件WATCHDOG的指令。

LOOP: CPL P1.0
      MOV 30H,#0         ;復(fù)位軟件WATCHDOG計數(shù)器

      MOV R6,#80H
      MOV R7,#0H
TT1:  DJNZ R7,TT1
      DJNZ R6,TT1
      JNB 00H,LOOP        ;受干擾否?
STOP:LJMP STOP           ; 掉入死循環(huán)。

T1中斷子程序修改如下:

PT1: CPL P1.2             ;高級中斷程序發(fā)光二極管閃爍
     INC 30H
     MOV A,30H
     ADD A,#0FDH
     JC ERR               ;達到3次否?
     RETI

ERR: LJMP STAT       ;軟件WATCHDOG動作

    當(dāng)按下按鈕前,程序正常運行(三個LED全閃)。按下按鈕后,主程序能迅速恢復(fù)工作,但兩個中斷子程序被封鎖,不再工作。過程如下:主程序檢測到干擾后進入死循環(huán),不能執(zhí)行復(fù)位30H單元的操作,T1中斷使30H不斷增值,計數(shù)到3時,軟件WATCHDOG執(zhí)行動作,執(zhí)行一條LJMP指令,使程序從頭執(zhí)行。MAIN過程中清除了干擾標志(表示干擾已經(jīng)過去),使主程序迅速恢復(fù)工作。按理說MAIN過程中也重新設(shè)定了各個中斷,并開放了它們,為什么中斷不能恢復(fù)工作呢?這是因為中斷激活標志的復(fù)位工作被遺忘了,因
30樓: >>參與討論
tubie
喂狗的目的是為了讓主循環(huán)正常,主循環(huán)死了,中斷還有可能發(fā)生
 
31樓: >>參與討論
hotpower
暈菜~~~沒見過只有中斷沒有主程序的系統(tǒng)???
 
32樓: >>參與討論
陳雙君
定時器中1MS一次
定時器中1MS一次

33樓: >>參與討論
linwei1234
神經(jīng)失常才會跑飛的!
神經(jīng)失常才會跑飛的!目前還沒有真正能解結(jié)此問題的吧?
這些都是微處理器的缺陷!我想不久將會解結(jié)這些問題的!

34樓: >>參與討論
tqdyx
什么地方喂無所謂,看具體情況
如果主程序是只有初始化的死循環(huán),喂了也沒什么意義。要在中斷中喂的話,要把握時間的可預(yù)測性。

35樓: >>參與討論
tubie
程序即使跑飛了,中斷還是有可能發(fā)生的。
 
36樓: >>參與討論
hotpower
我真是被暈死了...無話可說!!!
 
37樓: >>參與討論
hotpower
拿周航慈的書來論證,哪_reset_()函數(shù)是干什么吃的???
/*------------------------------------------------------------------------------------------*/
#define _intjmp_(ADDR) DPTR = (void *)ADDR;_icall_(__reset_code__) //中斷隱身函數(shù)_intjmp_()聲明
#define _reset_() DPTR = __reset_code__ + 5;_icall_(__reset_code__) //軟復(fù)位函數(shù)_reset_()聲明
_db_(__reset_code__, "\xc0\x82\xc0\x83\x32\xe4\xc0\xe0\xc0\xe0\x32");//裝載數(shù)據(jù)DB 0xc0..0x32
/*--------------------------------------------------------------------------------------------
裝載代碼   __reset_code__: PUSH  DPL;//非典的軟復(fù)位函數(shù)入口(執(zhí)行2次RETI)
                           PUSH  DPH
                             RETI;//_intjmp_()函數(shù)調(diào)用到此為止中斷退出并跳入子程序隱身(讓出中斷)
                           CLR   A;//經(jīng)典的軟復(fù)位函數(shù)入口(執(zhí)行1次RETI)
                           PUSH  ACC
                           PUSH  ACC
                           RETI;//_reset_()函數(shù)調(diào)用從此處跳入0x0000開始執(zhí)行



看來再說也無用了...

"程序即使跑飛了,中斷還是有可能發(fā)生的"毒害太深了...

偽本征函數(shù)——keil c51頭文件intrins.h的擴容工程     第三版

38樓: >>參與討論
不起眼
呵呵,這也爭論。
如果你僅僅為了養(yǎng)狗,你可以在中斷喂狗。別忘了你養(yǎng)狗的目的是什么?
既然養(yǎng)狗就要讓他盡可能大的起作用。原則就是即不餓著,也不撐著。
這需要技巧。如果怕麻煩,干脆不養(yǎng)算了。

39樓: >>參與討論
ljxh401
1
那還不是一樣了…………既然要設(shè)置標志,還不如去喂狗……

等于說,告訴鄰居,你要記得幫我喂狗噢……如果有一天沒有告訴鄰居,那么狗就回來咬主人了……



可以連坐 保證兩個啊

40樓: >>參與討論
gwnpeter
我的方式
呵呵,使用中庸之道把
我得是使用定時器每隔一段時間置一下位,然后在主函數(shù)里面的superLoop結(jié)構(gòu)中檢測置位,并喂狗狗!

41樓: >>參與討論
fzy_666
看怎么喂
中斷喂狗和主程序喂狗要看程序怎么寫:
  如果中斷是不常用的,那在主程序中喂狗比較好
  如果定時中斷的,我認為在中斷中喂狗比較方便
本人在一般情況下中斷是一直開的,在主程序中作標志,在中斷中喂狗,本人還沒有用過主程序中喂狗的,呵呵,見笑了!!

42樓: >>參與討論
xah_98765
支持中斷喂狗
平時都在主程序中喂狗,在中斷中喂狗能起到軟件陷阱的作用,就看你的中斷服務(wù)程序的執(zhí)行時間了.兩者有機結(jié)合,就能達到好的效果.

43樓: >>參與討論
xinzha
狗只是看著不讓你的軟件跑飛。
中斷屬于一種異常,一般情況下所有異常都會得到正確的執(zhí)行,即使你的系統(tǒng)發(fā)生了一些不可預(yù)知的錯誤導(dǎo)致軟件跑飛,每次中斷還是會準確地進入,這個時候喂狗等于你把看門狗硬件給禁掉一樣。
    不過在中斷中應(yīng)該可以自己搞個軟件狗,可以防止程序跑飛,并且能夠盡量不硬件復(fù)位丟失目前軟件中的一些信息。

44樓: >>參與討論
mxh0506
支持xinzha
狗只是看著不讓你的軟件跑飛。

中斷屬于一種異常,一般情況下所有異常都會得到正確的執(zhí)行,即使你的系統(tǒng)發(fā)生了一些不可預(yù)知的錯誤導(dǎo)致軟件跑飛,每次中斷還是會準確地進入,這個時候喂狗等于你把看門狗硬件給禁掉一樣。
    不過在中斷中應(yīng)該可以自己搞個軟件狗,可以防止程序跑飛,并且能夠盡量不硬件復(fù)位丟失目前軟件中的一些信息。

===============================================

看門狗不過就是一種超時復(fù)位機制,系統(tǒng)中有一個這樣的硬件機制用來防止程序失常就夠了.在有硬WDT守護的任務(wù)中,再添加軟超時守護其它任務(wù)即可


45樓: >>參與討論
fanjunfeng
頂一下
以前沒太注意這方面問題,又增長見識了。

46樓: >>參與討論
sjm2005
學(xué)習(xí)了
大家各抒己見,好啊。真的學(xué)習(xí)了。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
MEGA8 資料有錯?定時器1,PWM
關(guān)于ATMEG48熔絲位的設(shè)置?
關(guān)于BOOTLOADER操作的問題。
兩片M8以IIC總線通訊的問題?
告訴我TWH8752T與WH8751區(qū)別,謝謝!
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號