|
|||||||||||
| 技術(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 |
永不跑飛的單片機 |
| 作者:analogman 欄目:單片機 |
設(shè)想有這樣一款單片機:Harvard架構(gòu),全部指令為單字。那是否意味著它永遠不會跑飛,進入一個死循環(huán)呢? |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2005/12/5 14:48:00 發(fā)布:
不能。另外,跑飛跟死循環(huán)是兩個概念 假設(shè)程序由于受到某種干擾,而跑飛。結(jié)果跑到一個地方,改了某個標志,然后 再繼續(xù)運行,可能就是一個死循環(huán)了。這有點類似兩個進程之間的死鎖,誰也不讓誰。 |
|
| 3樓: | >>參與討論 |
| 作者: cxd731 于 2005/12/5 15:34:00 發(fā)布:
暈,這個世界上沒有永遠的說法! 銀河系幾十億年后可能都不存在了,何況區(qū)區(qū)人類設(shè)計的東東…… * - 本貼最后修改時間:2005-12-5 15:40:12 修改者:cxd731 |
|
| 4樓: | >>參與討論 |
| 作者: 夏蟲 于 2005/12/5 17:47:00 發(fā)布:
這種情況是不是只能做為理想啊 |
|
| 5樓: | >>參與討論 |
| 作者: chunyang 于 2005/12/5 19:03:00 發(fā)布:
夠資格說永遠的只有上帝! |
|
| 6樓: | >>參與討論 |
| 作者: analogman 于 2005/12/5 19:13:00 發(fā)布:
多謝諸位解答! 再問computer00: 多謝糾正!主題應(yīng)該叫永不死機的單片機 既然全部為單字指令,程序區(qū)中又無數(shù)據(jù),那么它跑飛后不管落到何處都應(yīng)是正軌,怎會死循環(huán)呢?就像是一個不存在死循環(huán)的時序邏輯電路,無論多強干擾,都不應(yīng)造成器件死循環(huán)吧?(最多造成個別循環(huán)周期不準) |
|
| 7樓: | >>參與討論 |
| 作者: analogman 于 2005/12/5 19:24:00 發(fā)布:
chunyang是哲學(xué)家嗎? 不想在這里討論哲學(xué)問題,請諸位不要在個別字眼上糾纏不清了。 世事無絕對,對一個人,長于其有生之年的事務(wù)對他而言就可稱為永遠。對一件產(chǎn)品來講,只要在其使用壽期內(nèi)不死機,我就稱他為永不死機。這是工程師的語言,不是哲學(xué)家的語言。 |
|
| 8樓: | >>參與討論 |
| 作者: hqgboy 于 2005/12/5 19:45:00 發(fā)布:
你的“永不死機”沒意義啊。 |
|
| 9樓: | >>參與討論 |
| 作者: javie 于 2005/12/5 20:33:00 發(fā)布:
嗯 |
|
| 10樓: | >>參與討論 |
| 作者: hotpower 于 2005/12/5 20:35:00 發(fā)布:
永動機如何??? |
|
| 11樓: | >>參與討論 |
| 作者: chunyang 于 2005/12/5 21:11:00 發(fā)布:
樓主所言恰恰是在糾纏 從技術(shù)上講,追求不死機的MCU遠不及追求高可靠電路設(shè)計現(xiàn)實,方向有誤就成了緣木求魚。 |
|
| 12樓: | >>參與討論 |
| 作者: 啊龍 于 2005/12/5 21:57:00 發(fā)布:
程序雖然還在你的預(yù)料范圍中,但它可能已是錯誤的運行。 要求的應(yīng)該是無錯誤的運行,而不是不“死機”,事實上死機的機器也還是在執(zhí)行指令的。我也有過類似的想法,就是你把所有的程序都做到一個指令中運行,也是會出錯的,組合邏輯電路有冒險現(xiàn)象,更不要說時序電路了。看來永不出錯的單片機是沒有的。就是人,也會出錯誤的。 |
|
| 13樓: | >>參與討論 |
| 作者: computer00 于 2005/12/5 22:14:00 發(fā)布:
人比機器更容易出錯 |
|
| 14樓: | >>參與討論 |
| 作者: analogman 于 2005/12/6 9:21:00 發(fā)布:
諸位 chunyang: 實踐表明,軟件的問題要遠比硬件問題多。 阿龍:不怕出錯,就怕出了錯不能自行糾正。只要處理器不死,能自行回到正常的流程,再加上合理的軟件設(shè)計,它就可以自行糾正錯誤。 說此論題沒意義的朋友:這是實現(xiàn)一個魯棒系統(tǒng)的基礎(chǔ)。 另外再重申一下,此帖的目的不是想討論是否存在這樣的單片機,而是想討論: 一個純Harvard架構(gòu)、單字指令系統(tǒng)的單片機----這樣的單片機并不難實現(xiàn)----有無可能用它設(shè)計出一個不會死機的系統(tǒng)?(或者說,真正魯棒的系統(tǒng)) * - 本貼最后修改時間:2005-12-6 9:25:04 修改者:analogman |
|
| 15樓: | >>參與討論 |
| 作者: hunter01 于 2005/12/6 10:05:00 發(fā)布:
跑飛和工藝關(guān)系更大。 如果工藝夠好就能保證不跑飛。 |
|
| 16樓: | >>參與討論 |
| 作者: lucidmask 于 2005/12/6 12:11:00 發(fā)布:
永遠不要說永遠! |
|
| 17樓: | >>參與討論 |
| 作者: 艾森豪威爾 于 2005/12/6 12:23:00 發(fā)布:
呵呵,哲學(xué)與科學(xué)的交鋒 |
|
| 18樓: | >>參與討論 |
| 作者: ketp 于 2005/12/6 12:39:00 發(fā)布:
- 大部分的程序跳過一段代碼后還能正常運行嗎? |
|
| 19樓: | >>參與討論 |
| 作者: rainbowhq 于 2005/12/6 13:01:00 發(fā)布:
暈倒 這個還要討論嗎? 哪里有絕對的事情啊? 只有盡量不讓"跑飛"出現(xiàn),或者進行及時糾正就行啦 |
|
| 20樓: | >>參與討論 |
| 作者: hotpower 于 2005/12/6 14:22:00 發(fā)布:
不怕飛就怕擺脫引力 |
|
| 21樓: | >>參與討論 |
| 作者: zhf0964 于 2005/12/6 16:55:00 發(fā)布:
即使全部是單字節(jié)指令,它也會跑飛。 所以常用看門狗將跑飛的程序拉回到起點重新運行。 |
|
| 22樓: | >>參與討論 |
| 作者: analogman 于 2005/12/6 18:01:00 發(fā)布:
感謝樓上!此帖才回到正題 通常認為,程序跑飛是由于指令指針內(nèi)容因干擾而錯亂,指向非正常指令的地址,使整個程序錯亂,最終進入一個死循環(huán)而無法自行恢復(fù)。 但是,如果指令全部是單字的,指令指針出錯后它只不過是錯誤地跳到程序的另一個地方開始執(zhí)行,產(chǎn)生一些誤動作,按說最終總是能步入正軌的。這是我的設(shè)想,如果不能同意這一點,能否構(gòu)想出一種致使這種處理器跑飛并死機的機理來? |
|
| 23樓: | >>參與討論 |
| 作者: laden 于 2005/12/6 18:56:00 發(fā)布:
樓上說的并不全對。 就算是單片機指令全部是單字節(jié)指令,在跑飛后也不是“最終總是能步入正軌的”。 無法構(gòu)想一種致使處理品跑飛并死機的機理。我們采用看門狗,是因為單片機無法自己知道下一步指令是哪一個,它只能按照我們事先設(shè)定好的順序一步一步往下走。如果它知道程序跑飛了,那還要我們編程序干嗎呢? |
|
| 24樓: | >>參與討論 |
| 作者: computer00 于 2005/12/6 18:59:00 發(fā)布:
例如一個操作系統(tǒng),由于程序跑飛,把中斷給關(guān)了 時鐘節(jié)拍都沒了,那不是死機是什么? |
|
| 25樓: | >>參與討論 |
| 作者: hotpower 于 2005/12/6 19:02:00 發(fā)布:
我認為現(xiàn)在最需考慮的是讓偏離航向的飛行器如何回到原航道上 |
|
| 26樓: | >>參與討論 |
| 作者: analogman 于 2005/12/6 19:31:00 發(fā)布:
中斷關(guān)了時鐘節(jié)拍還是有的 假定該處理器不設(shè)stop和POWER down模式。 另外,軟件設(shè)計也要充分考慮。例如,在一些靠中斷驅(qū)動的系統(tǒng)里,在任何等待中斷的循環(huán)中都設(shè)置開放中斷的指令。這樣是否就可以避免這種死機模式呢? |
|
| 27樓: | >>參與討論 |
| 作者: hotpower 于 2005/12/6 19:39:00 發(fā)布:
同意樓上意見 沒人想讓看門狗輕易死機的,特別是定時器被意外關(guān)閉. |
|
| 28樓: | >>參與討論 |
| 作者: analogman 于 2005/12/6 19:43:00 發(fā)布:
回:hotpower 是的,不怕偏離航線,就怕找不著北。 我想討論的是,如果把你放到南極,你就永遠也不用擔(dān)心找不著北了。如果還有擔(dān)心,請給我一個理由。 * - 本貼最后修改時間:2005-12-6 19:46:50 修改者:analogman |
|
| 29樓: | >>參與討論 |
| 作者: HIGHWAY 于 2005/12/6 19:45:00 發(fā)布:
有的程序不允許非,有的程序允許,后者用WTD即可 前者只有在設(shè)計上多下工夫.沒有不死的鳥:) |
|
| 30樓: | >>參與討論 |
| 作者: cf100 于 2005/12/6 20:20:00 發(fā)布:
單片機是無辜的 單片機是死腦筋,只會執(zhí)行指令。跑飛與外界環(huán)境和人的因素有關(guān)。如果某人編了個程序本來就是四處亂跑的程序,單片機什么時候智能到敢抗人命? 只要程序能執(zhí)行,單片機就有跑飛可能! |
|
| 31樓: | >>參與討論 |
| 作者: 啊龍 于 2005/12/6 21:10:00 發(fā)布:
analogman你的這個想法,只能提高錯誤的修復(fù)率 但不能不出錯誤。假設(shè)用你設(shè)計的那種機器,是一個單大循環(huán)程序,你在程序中需要判斷錯誤修復(fù)錯誤,就要有標志。你能保證標志永不錯嗎?我說過,走飛或死機,只要時鐘,復(fù)位正常,他永遠都在執(zhí)行程序。至于執(zhí)行的是否是正確,有效的指令,有什么關(guān)系呢?關(guān)鍵是你應(yīng)該如何能保證機器運行到你的錯誤判斷程序來。你說的程序中還不能有小循環(huán),不然也會退不出去。看門狗應(yīng)該可以看作一種由你的程序控制的錯誤判斷程序。還有一種不用你的程序控制的,定時復(fù)位單片機的硬電路,也可以永不“死機”。那都需要軟件的良好支持。 |
|
| 32樓: | >>參與討論 |
| 作者: 赤鑄 于 2005/12/7 2:10:00 發(fā)布:
程序修改數(shù)據(jù),數(shù)據(jù)控制程序 程序的流程最終是由許多關(guān)鍵的變量控制的,所以 “既然全部為單字指令,程序區(qū)中又無數(shù)據(jù),那么它跑飛后不管落到何處都應(yīng)是正軌,怎會死循環(huán)呢?就像是一個不存在死循環(huán)的時序邏輯電路,無論多強干擾,都不應(yīng)造成器件死循環(huán)吧?(最多造成個別循環(huán)周期不準)” 這種說法不成立。你無法預(yù)期程序跑飛會對那些決定流程的變量有何影響。 而且,程序中可能原本就有死循環(huán),例如中斷等待的死循環(huán)。假如程序剛好在禁止一切中斷后跑飛到這個死循環(huán)里……好像有個成語,叫什么來著?天堂有路什么的 當(dāng)然,如果再加上一套適當(dāng)“編程規(guī)范”,那似乎的確可以不死循環(huán)…… 這說明,離開必要的軟件措施,任何硬件措施都無法發(fā)揮威力 |
|
| 33樓: | >>參與討論 |
| 作者: 赤鑄 于 2005/12/7 2:16:00 發(fā)布:
即使不死又如何? 程序有時就像個殺手,如果不能正確執(zhí)行任務(wù)了,還是找個合適的地方干脆死掉的好 例如,沒有死掉,但繼續(xù)下去會發(fā)出驅(qū)動沖床的大錘的指令,而此時檢修工人的腦袋正在錘下……似乎夸張了點,呵呵 |
|
| 34樓: | >>參與討論 |
| 作者: 赤鑄 于 2005/12/7 2:19:00 發(fā)布:
另外,不必是單字節(jié) 只要是“完整指令”就可以,或者,只要所有指令長度都是2的N次方,而且起始地址對齊到2的N次方,而且,指令地址的最低N位固定為0,就可以杜絕指令被肢解的情況 |
|
| 35樓: | >>參與討論 |
| 作者: zmlab.com 于 2005/12/7 8:12:00 發(fā)布:
樓主的想法值得鼓勵 至少我們要去思考,去探索。盡管在現(xiàn)在的計算機體系結(jié)構(gòu)下看上去很難或者不可能實現(xiàn),但不排除在新的結(jié)構(gòu)下有實現(xiàn)的可能。技術(shù)上的發(fā)明進步很多時候就是這樣發(fā)生的,如果有一個想法出現(xiàn)就馬上憑當(dāng)時的條件斷定不可能而放棄,那是不是有點畫地為牢。 |
|
| 36樓: | >>參與討論 |
| 作者: wzx11 于 2005/12/7 8:18:00 發(fā)布:
:0 沒有絕對的概念!看樣子analogman的哲學(xué)學(xué)的不太好。 |
|
| 37樓: | >>參與討論 |
| 作者: nxren 于 2005/12/7 9:58:00 發(fā)布:
永不跑飛的單片機 斷電了,就停了哦. * - 本貼最后修改時間:2005-12-7 10:12:54 修改者:nxren |
|
| 38樓: | >>參與討論 |
| 作者: fsclub 于 2005/12/7 10:13:00 發(fā)布:
沒有意義 在某個時候,本來應(yīng)該去對IO操作,但程序跑到別的地方了,比如跑去執(zhí)行中斷程序了,這時候中斷程序?qū)δ硞寄存器進行致使的修改,中斷出來,回到主程序什么地方,SRAM都沒有保護,單片機還能運行? |
|
| 39樓: | >>參與討論 |
| 作者: LZL869 于 2005/12/7 14:15:00 發(fā)布:
ok! weel! |
|
| 40樓: | >>參與討論 |
| 作者: gbchang 于 2005/12/7 18:02:00 發(fā)布:
現(xiàn)有結(jié)構(gòu)就可以實現(xiàn)了:不用向前跳轉(zhuǎn),不用堆棧,編碼填滿整... 現(xiàn)有51結(jié)構(gòu)就可以實現(xiàn)了: 不用向前跳轉(zhuǎn), 不用堆棧, 不用中斷, 所有代碼前后加"nop" 編碼填滿整個程序?qū)ぶ房臻g,到頭后自然循環(huán)。 任務(wù)用時間觸發(fā), 事件由條件觸發(fā), 如此設(shè)計程序,跑飛與否都一樣在"正確"執(zhí)行。 除非一直往一個地方飛,嘿嘿,那就沒辦法了。 |
|
| 41樓: | >>參與討論 |
| 作者: guosr 于 2005/12/7 18:36:00 發(fā)布:
有時候程序異常了,還不如死了算了 打個比方,一個自動售貨機,顧客給錢買東西,應(yīng)該找顧客零錢。程序上需要做A-B的減法。在沒有任何人購物的情況下,受到干擾而異常運行到這個位置,而參與計算的寄存器保持在某個子程序中的數(shù)值,因此你啟動找錢的程序,白白的吐出鋼崩…… 我們來做個數(shù)值分析,假設(shè)確認用戶輸入鈔票到找零錢之間的指令總共有200條指令(讓用戶選擇商品),總共的程序空間是10K,那么我把程序搞亂,從而白白的拿到鋼崩的概率就是2%。我肯定會拿著電子大伙器從早到晚不停的折騰這個售貨機。 當(dāng)然,你可以說你會對敏感數(shù)據(jù)進行防護,但是你的程序不會跑飛,仍然會繼續(xù)運行。假設(shè)一個輸入密碼的程序,異常之后剛好落在密碼合法性檢查之后。那簡直等于沒有密碼。你做的任何防護都是白搭。 這些問題在其他單片機中也可能存在,但是其他的單片機絕大部分情況下都會跑飛,從而最終被看門狗復(fù)位,雖然死了一次,但是沒造成什么損失,活過來以后照樣正常運行。 總結(jié):聯(lián)想一下載人航天,我們的目的不是確保航天器絕對不死機,而是確保即使航天器死機了,也能把人安全的送回來。 |
|
| 42樓: | >>參與討論 |
| 作者: water2005 于 2005/12/7 18:42:00 發(fā)布:
re cf100和gbchang說的很明白了。 如果有不死機的單片機,那它用的使用肯定受限制 |
|
| 43樓: | >>參與討論 |
| 作者: linwei1234 于 2005/12/7 20:35:00 發(fā)布:
哦 |
|
| 44樓: | >>參與討論 |
| 作者: sfofyyy 于 2005/12/8 8:39:00 發(fā)布:
這樣的討論很好 |
|
| 45樓: | >>參與討論 |
| 作者: PRCXF 于 2005/12/8 11:01:00 發(fā)布:
樓主指的是不是pc指針受干擾導(dǎo)致的程序跑飛? 就是全單字指令,也完全可能在受干擾的情況下進入死循環(huán),除非芯片抗干擾設(shè)計或工藝相當(dāng)相當(dāng)強。! |
|
| 46樓: | >>參與討論 |
| 作者: analogman 于 2005/12/8 12:24:00 發(fā)布:
只要你的程序中沒有這樣的陷井,這個死循環(huán)從哪來? |
|
| 47樓: | >>參與討論 |
| 作者: maxele 于 2005/12/8 13:18:00 發(fā)布:
dui dui |
|
| 48樓: | >>參與討論 |
| 作者: fsclub 于 2005/12/8 17:04:00 發(fā)布:
這還能運行嗎? gbchang 發(fā)表于 2005-12-7 18:02 侃單片機 ←返回版面 現(xiàn)有結(jié)構(gòu)就可以實現(xiàn)了:不用向前跳轉(zhuǎn),不用堆棧,編碼填滿整... 現(xiàn)有51結(jié)構(gòu)就可以實現(xiàn)了: 不用向前跳轉(zhuǎn), 不用堆棧, 不用中斷, 所有代碼前后加"nop" 編碼填滿整個程序?qū)ぶ房臻g,到頭后自然循環(huán)。 任務(wù)用時間觸發(fā), 事件由條件觸發(fā), 如此設(shè)計程序,跑飛與否都一樣在"正確"執(zhí)行。 除非一直往一個地方飛,嘿嘿,那就沒辦法了。 --------------------- 這樣的話,先不說跑飛還能不能正常.你的算法還能不能實現(xiàn)四則運算? |
|
| 49樓: | >>參與討論 |
| 作者: zwcwy 于 2005/12/8 23:32:00 發(fā)布:
死機不死機不僅僅是單片機芯片決定的 還由軟件決定,如果軟件的所有代碼的任何部分真的不可能構(gòu)成任何死循環(huán),那么就有可能不死機,舉個極端的例子,一個51最小系統(tǒng),指令全部是FFH,執(zhí)行完64K就又回到了0繼續(xù)循環(huán),無論受干擾跳到哪里都沒影響。但類似這樣的代碼恐怕在實際應(yīng)用中不太可能出現(xiàn),因為所能做的事情太有限了,單片機內(nèi)的大部分的硬件資源也不能使用,否則也可能造成死循環(huán)。所以想只靠改善單片機的結(jié)構(gòu)和指令系統(tǒng)就完全防止死機不太現(xiàn)實。 |
|
| 50樓: | >>參與討論 |
| 作者: jimmy shi 于 2005/12/9 8:07:00 發(fā)布:
硬件遇到ESD強度一定的時候就會LATCH UP! 你想飛都飛不起來! |
|
| 51樓: | >>參與討論 |
| 作者: analogman 于 2005/12/9 9:04:00 發(fā)布:
zwcwy講得好! 單片機系統(tǒng)的可靠性當(dāng)然是由軟硬件兩方面決定的,硬件只是提供了一個物質(zhì)基礎(chǔ)。 本貼只想討論硬件這一方面,即是否存在這樣一個足夠魯棒的物質(zhì)基礎(chǔ)。 假定軟件設(shè)計足夠合理,不因任何數(shù)據(jù)或標志位的錯誤而死循環(huán),那么,我所提出的這種架構(gòu)的單片機是否具備這樣的魯棒性? zwcwy舉的那個例子不就給我們帶來了一線曙光嗎? |
|
| 52樓: | >>參與討論 |
| 作者: computer00 于 2005/12/9 9:24:00 發(fā)布:
不能出現(xiàn)死循環(huán)?那程序?qū)懫饋砭屠щy了。 |
|
| 53樓: | >>參與討論 |
| 作者: gz_zhmj 于 2005/12/9 9:24:00 發(fā)布:
也許樓主應(yīng)該搞明白死機和程序出錯的定義。 如果程序一直在運行,不管是不是正確的代碼就不算死機的話,那么所有的單片機都不會死機,只要晶震還有。 如果程序跑飛了,程序還沒有出錯,那所有的單片機都不可以。除非你的單片機什么都不做,全是NOP指令,可能還有一種情況,你用IO口取反控制指示燈閃爍,大概程序永遠不會出錯,但這樣所有的單片機都可以,未必要樓主所謂的單片機了。 |
|
| 54樓: | >>參與討論 |
| 作者: rivflood 于 2005/12/9 9:57:00 發(fā)布:
硬件和軟件本來就是一個共同體 單純拋開硬件談軟件,或者拋開軟件談硬件都沒有什么意義。 本來一個系統(tǒng)設(shè)計出來的目的是為了能夠盡量正確的執(zhí)行設(shè)定的指令,并且在有錯誤發(fā)生的時候能夠及時的修正。 但是感覺樓主的想法只是為了硬件指令能夠順利執(zhí)行,而不是正確的執(zhí)行,至于魯棒,鄙人才疏,不知為何物,暫不提。 樓主的想法,以我的理解,就是一個成了植物人的病人(就像一個跑飛的系統(tǒng)),不是想辦法趕緊用科學(xué)的方法喚醒他(wdt或者reset),而是讓他保持這樣一個狀態(tài),其他他能夠自然的醒過來(因為系統(tǒng)沒有崩潰,依舊在運行,只是程序跑飛,然后期待系統(tǒng)能夠自行回到正軌),我想這不應(yīng)該是我們所期待的。 所以,我想樓主的想法是對的,但不見得是最好的想法,或者是問題的關(guān)鍵所在,系統(tǒng)運行的目的在于穩(wěn)定和正確,至于解決跑飛問題,只是達到目的的手段而已,樓主的想法個人以為是一個辦法,但是有點極端 |
|
| 55樓: | >>參與討論 |
| 作者: privateer 于 2005/12/9 10:44:00 發(fā)布:
意義不大 這樣對于單片機來說是不會死,但是對于外圍器件,信號不對一樣會死機,所以從系統(tǒng)來說沒什么意義 |
|
| 56樓: | >>參與討論 |
| 作者: 悲傷止步 于 2005/12/9 11:16:00 發(fā)布:
10為底對數(shù)函數(shù)的匯編程序 以10為底對數(shù)函數(shù)的匯編程序,哪位大哥能給一個簡單的?Email:shuhao125@163.com |
|
| 57樓: | >>參與討論 |
| 作者: ttjlc 于 2005/12/9 16:57:00 發(fā)布:
:) 永遠有多遠? 永動機有沒有出現(xiàn)?? |
|
| 58樓: | >>參與討論 |
| 作者: analogman 于 2005/12/9 18:23:00 發(fā)布:
永遠就是比玩完多一秒 樓上怎么還在這個字眼上糾纏?那我告訴你吧,當(dāng)你GF對你說她永遠愛你時她的意思是:在你玩完之前! rivflood的比喻不太恰當(dāng)。死機的單片機更象是一個神經(jīng)病,而不是植物人,植物人大部分是腦死亡了。 51單片機是很容易得神經(jīng)病的,指令指針一錯,腦子就亂了。我講的這種架構(gòu)現(xiàn)在看起來不大容易得神經(jīng)病。當(dāng)然,傷風(fēng)感冒打噴嚏不可避免,但是,只要有合理的軟件配合,它應(yīng)該有足夠的免疫力自行恢復(fù)健康。 舉一個測控系統(tǒng)的例子:單片機采集一定的數(shù)據(jù),計算控制參數(shù),然后通過執(zhí)行機構(gòu)實施控制。這樣的系統(tǒng)經(jīng)受干擾后,也就造成CPU從程序的一個地方跳到到了另一個地方,或者運行參數(shù)發(fā)生了變化。但是,整個程序的流程不會變。所造成的后果是,在干擾發(fā)生后的一段時間內(nèi),程序給出錯誤的控制參數(shù),執(zhí)行一些誤動作。但是,只要流程不亂,經(jīng)歷幾個循環(huán)之后,控制系統(tǒng)會自行恢復(fù)正常,因為新的輸入?yún)?shù)是正確的,控制系統(tǒng)的控制函數(shù)(算法)沒有變化,結(jié)果當(dāng)然正確。 只要有了這樣堅固的硬件平臺,做一個不會出現(xiàn)死循環(huán)的軟件應(yīng)該也不太難吧?不是已經(jīng)有人給出了實例嘛。 |
|
| 59樓: | >>參與討論 |
| 作者: chen16889 于 2005/12/9 18:54:00 發(fā)布:
各位我現(xiàn)時用飛利蒲LPC915做A/D轉(zhuǎn)換 各位我現(xiàn)時用飛利蒲LPC915做A/D轉(zhuǎn)換,滿輸入3V3時分辯率只有0.01V,而我檢測輸入電壓是40V用串150K再10K落地分壓,采樣變化率很小要求輸入電壓變化正負0.1V可檢查出,用運算放大器放大,負輸入接參考偏移電平,放大就可以了,但運算放大器放大后并不是線性若乘以固定倍數(shù)則算出的電壓值更不準,大蝦們可有良方呀。 |
|
| 60樓: | >>參與討論 |
| 作者: youself 于 2005/12/10 19:01:00 發(fā)布:
有的時候死機不是說跑飛,可能是CPU根本就跑不動了 這是完全有可能的。 |
|
| 61樓: | >>參與討論 |
| 作者: fsaok 于 2005/12/11 5:55:00 發(fā)布:
仰面大笑出門去 單片機的出路,不是是否跑飛,而是跑飛后如何回來。 對于設(shè)計者來說,是把干擾減少到最低, 打個不太合適的比如,人身體沒事才能工作, 但每天讓你去醫(yī)院檢查一下,你即使沒病也受不了。 所以,處理器如果總在被干擾,怎么能工作正常? 長時間不被干擾,那在有干擾又如何處理,用狗讓它自己回來是最好的做法 |
|
| 62樓: | >>參與討論 |
| 作者: eeproom 于 2005/12/11 9:40:00 發(fā)布:
好熱鬧! 我的經(jīng)驗,一個穩(wěn)定的系統(tǒng),需要軟件硬件都合理。首先需要一個夯實的硬件平臺,上半年一公司給我一個設(shè)計好的基于51的硬件系統(tǒng),那工程設(shè)計者搞出來的系統(tǒng)就是不穩(wěn)定。其實簡單:驅(qū)動兩個交流電機、一個步進電機,但是致命的設(shè)計是設(shè)計者舍不得光藕,讓驅(qū)動同CPU直通GND,所以我就給這設(shè)計判了死刑。 我也覺得。程序的飛出,關(guān)鍵是PC在PUSH POP過程中搞錯了。最近搞的一個復(fù)雜控制系統(tǒng),我把所有的任務(wù)驅(qū)動都搞成中斷事件,呵呵,PC在堆棧里總是有上、下溢出的可能發(fā)生。開機工作前幾分鐘不正常,一旦順利了,測試100小時無事故。我一氣之下,修改成避免事件競爭中斷使用權(quán),它就溫順了! |
|
| 63樓: | >>參與討論 |
| 作者: analogman 于 2005/12/12 9:43:00 發(fā)布:
狗也有打盹的時候 我認為,狗是一種非常被動的辦法,還是有很大的風(fēng)險。比如,如果程序跑飛后落入一個死循環(huán),如果這個死循環(huán)中恰好有喂狗指令,那這個狗就失效了。 如果程序本身不會錯亂,那他的安全性要比狗安全得多。 |
|
| 64樓: | >>參與討論 |
| 作者: cf100 于 2005/12/12 19:20:00 發(fā)布:
人也有看走眼的時候 如果了解編程,就不會那么無聊了,好象“空想”一樣。 沒有一種單片機是不會跑飛的,如果有也是沒用。 再好的單片機,如果編程錯誤,也和跑飛一樣,可能比跑飛還差。 如果做個死循環(huán),然后死循環(huán)中喂狗,這種程序編出來本身就是想“自斃”的人。 就算是好的程序,也不能保證一定不會發(fā)生錯亂,但有狗要比無狗生命力強,這個沒人否認。 單片機是個軟硬結(jié)合體,沒有人敢說自己用的單片機是最完美的,程序是最完善的。選型、做線路、編程無一不是在糾錯的基礎(chǔ)上進行,而且萬一出錯,就是一萬的損失。 樓主不要懷疑成千上萬MCU硬件工程師的智商,如果真憑單指令就能做出永不跑飛的單片機,這種單片機早就面市了,別的單片機也早就完蛋了。 編程的根本就在于不斷地找“BUG”,盡可能完善自己的設(shè)計和程序。沒有人希望自己的程序是到處是錯,到處亂跑的程序,這需要編程者的努力和細致的工作。而如果在編程中由于經(jīng)常跑飛,而夢想有一種永不跑飛的單片機,怎么編都不會跑飛,好象是十分十分不現(xiàn)實的。 |
|
| 65樓: | >>參與討論 |
| 作者: analogman 于 2005/12/13 10:23:00 發(fā)布:
人看走眼那是人的問題 > 如果了解編程,就不會那么無聊了,好象“空想”一樣。 -- 依我看來,不了解的是你自己。 > 沒有一種單片機是不會跑飛的,如果有也是沒用。 -- WHY? 請不要光下結(jié)論,沒有論據(jù)來支持,跟喊口號似的。 > 再好的單片機,如果編程錯誤,也和跑飛一樣,可能比跑飛還差。 -- 對于一個不合格的程序員,給他再好的硬件也白搭。 > 如果做個死循環(huán),然后死循環(huán)中喂狗,這種程序編出來本身就是想“自斃”的人。 -- 這就是我說你“不了解”的原因。建議你先去了解一下單片機是如何“死掉”的。 > 就算是好的程序,也不能保證一定不會發(fā)生錯亂,但有狗要比無狗生命力強,這個沒人否認。 > 單片機是個軟硬結(jié)合體,沒有人敢說自己用的單片機是最完美的,程序是最完善的。選型、做線路、編程無一不是在糾錯的基礎(chǔ)上進行,而且萬一出錯,就是一萬的損失。 -- 同意!這就是我發(fā)此貼的原因。 > 樓主不要懷疑成千上萬MCU硬件工程師的智商,如果真憑單指令就能做出永不跑飛的單片機,這種單片機早就面市了,別的單片機也早就完蛋了。 -- 不敢懷疑先輩們的智商,相反,我在懷疑自己的智商,所以拿這個問題來請教大家,請大家不吝賜教。 -- 這種單片機是否真能做到這種可靠性我不能確定,但其缺點是明顯的。首先,既然是單字,那要提供足夠的處理能力就只有增加指令字寬了,內(nèi)部總線也要加寬。而Harvard結(jié)構(gòu)又會給單片機的靈活性帶來一定的局限。我想,這或許是這種機器極少的原因之一吧。 -- 單片機不是通用機,它往往是和應(yīng)用密切相關(guān)的,每種單片機只適用于一類特定的應(yīng)用,不可能通吃一切。因此,這樣的單片機即使存在的話,它也只會用于某些對于可靠性有特別高的要求的領(lǐng)域。 > 編程的根本就在于不斷地找“BUG”,盡可能完善自己的設(shè)計和程序。沒有人希望自己的程序是到處是錯,到處亂跑的程序,這需要編程者的努力和細致的工作。而如果在編程中由于經(jīng)常跑飛,而夢想有一種永不跑飛的單片機,怎么編都不會跑飛,好象是十分十分不現(xiàn)實的。 -- 硬件是基礎(chǔ)。在沙灘上,你建的樓再結(jié)實也沒用。 |
|
| 66樓: | >>參與討論 |
| 作者: cf100 于 2005/12/13 13:41:00 發(fā)布:
那么什么東西不會看走眼?當(dāng)然不會是人! 你的第一帖: 》》永不跑飛的單片機 》設(shè)想有這樣一款單片機:Harvard架構(gòu),全部指令為單字。那是否意味著它永遠不會跑飛,進入一個死循環(huán)呢? 《Harvard架構(gòu),全部指令為單字》==永遠不會跑飛 PIC就是這種架構(gòu),但PIC跑飛是常事。 -- 不敢懷疑先輩們的智商,相反,我在懷疑自己的智商,所以拿這個問題來請教大家,請大家不吝賜教。 有你這句話就行了,要我來說,我不會懷疑別人的智商,當(dāng)然也不會懷疑自己的智商. This’s all. |
|
| 67樓: | >>參與討論 |
| 作者: analogman 于 2005/12/13 15:18:00 發(fā)布:
暈!人到底會不會走眼?你的“程序”有點亂呀 地基不牢樓必塌,樓塌未必因地基。 既然對自己的智商如此自信,又如此堅信這樣的單片機會死。那能否列舉出一種“死法”來?當(dāng)然我指的是非硬件的、通過軟件手段無法避免的死法。 * - 本貼最后修改時間:2005-12-13 15:22:06 修改者:analogman |
|
| 68樓: | >>參與討論 |
| 作者: cf100 于 2005/12/13 15:40:00 發(fā)布:
是人當(dāng)然會走眼 你的結(jié)論:地基不牢樓必塌,樓塌未必因地基。 永不跑飛的單片機 設(shè)想有這樣一款單片機:Harvard架構(gòu),全部指令為單字。那是否意味著它永遠不會跑飛,進入一個死循環(huán)呢? 依你上面的格式就論一下樓房: 永不會塌的樓房 設(shè)想有這樣一幢樓:XX架構(gòu),全部地基為XX。那是否意味著它永遠不會塌,進入一個滅頂之災(zāi)呢? 以子之矛,擊子之盾,何如? 前面有很多很多網(wǎng)友已指出你論點的錯誤,就算你懷疑自己的IQ,也不應(yīng)該懷疑別人的IQ。不過我相信你還是具有一定的IQ。 |
|
| 69樓: | >>參與討論 |
| 作者: analogman 于 2005/12/13 16:29:00 發(fā)布:
還是亂! 嚴重懷疑你的理解力! 我前面已多次強調(diào)過:單片機只是提供了一個物質(zhì)基礎(chǔ),它為建立這樣一個不會死機的系統(tǒng)提供了可能。也就是說,它只是地基!而且,我也并沒有肯定它一定不會死(請看看我那句話的最后是什么標點)。 我從未懷疑過別人的IQ,只是有些人除了簡單地否定你之外,卻給不出一點點支撐其觀點的理由來。有IQ卻不用,那和沒有有何區(qū)別? |
|
| 70樓: | >>參與討論 |
| 作者: cf100 于 2005/12/13 19:49:00 發(fā)布:
Yeah,你懷疑過自己的IQ,就此打住,沒人可以救你! 你再仔細看一下自己前后的觀點,Sorry sir,I did nothing at all. 難怪某些高手說上一句就閉嘴,敢情他們某些方面的IQ就比我高了0.001%. |
|
| 71樓: | >>參與討論 |
| 作者: analogman 于 2005/12/14 9:26:00 發(fā)布:
呵呵,急了 莫急!在這里我只是真誠地想和大家討論問題。如果認為這個問題很弱智,你可以一笑置之,大可不必為此光火。記住,在討論問題時起急或者是不成熟的表現(xiàn),或者是理屈詞窮的表現(xiàn)。 |
|
| 72樓: | >>參與討論 |
| 作者: emyjob 于 2005/12/14 10:11:00 發(fā)布:
哎。不行啊。 還是不可靠!!哇~~~~~ |
|
| 73樓: | >>參與討論 |
| 作者: analogman 于 2005/12/14 13:28:00 發(fā)布:
別急 還拿建房子來說吧。如果建好的房子塌了,我們應(yīng)該首先檢查房子的構(gòu)造是否合理,再查所用建材是否合格。如果這些都沒有問題的話,再看地基有無問題,選址是否合適。 反之,如果房子還沒建,我們正打算建房子,那就應(yīng)該反過來:首先選址,選一個堅實的地基,然后再打地基,再在上面蓋房子。 |
|
| 74樓: | >>參與討論 |
| 作者: cf100 于 2005/12/14 16:02:00 發(fā)布:
這有什么好急的,只是覺得好笑而已 首先選址,選一個堅實的地基,然后再打地基,再在上面蓋房子。這樣就能建造成一幢永不會塌的房子;然后住個永不會死的人。 |
|
| 75樓: | >>參與討論 |
| 作者: analogman 于 2005/12/14 16:40:00 發(fā)布:
“程序”又跑飛了吧 永不會死的人沒有,但人死之前不會塌的房子多的是。(見我前面對“永遠”的定義) 此生最怕和兩種人說話,一種是潑婦,一種是哲學(xué)家。前者一點邏輯性沒有,你跟他沒法說理。后者邏輯性太強,往往抓住你一點點概念上的問題將你批個體無完膚,你也沒法跟他說理。 |
|
| 76樓: | >>參與討論 |
| 作者: mynote 于 2005/12/14 16:48:00 發(fā)布:
明白就好 大家都是電子行業(yè)的,準確固然重要.但是大家又不是在做技術(shù)報告 只要明白說話者的意圖就好了 |
|
| 77樓: | >>參與討論 |
| 作者: computer00 于 2005/12/14 16:51:00 發(fā)布:
光想有什么用啊,做出來再說吧,或者已經(jīng)試圖在做了。 |
|
| 78樓: | >>參與討論 |
| 作者: cf100 于 2005/12/14 20:00:00 發(fā)布:
沒有人能做出“永不跑飛”的系統(tǒng) 當(dāng)然“哲學(xué)家”是不說“永遠”,因為那是個大“漏洞”。 當(dāng)然“潑婦”從來都是說“永遠”的,因為她永遠不知道“永遠”是什么意思,她可以對“永遠”這個表示無窮無盡的時間概念進行自定義,出發(fā)點僅僅是為了表現(xiàn)一下“潑婦”的論戰(zhàn)水平。 身正不怕影歪,如果概念上不錯,哲學(xué)家也無空可鉆;如果不象“潑婦”一樣亂定義“永遠”,還怕“潑婦”定義的“永遠”比你還短。 如果我說,我做了個相當(dāng)穩(wěn)定的系統(tǒng),沒人有空可鉆,因為這是正常的;如果我說,我做了個永遠穩(wěn)定的系統(tǒng),別人就會當(dāng)我說胡話。 如果你的“永遠”的定義是科學(xué)的話,那么“永動機”就也沒人敢批駁了。不過現(xiàn)在絕大多數(shù)人都將“永動機”的鼓吹者當(dāng)成大腦進水或IQ出錯者。 * - 本貼最后修改時間:2005-12-14 20:03:04 修改者:cf100 |
|
| 79樓: | >>參與討論 |
| 作者: cf100 于 2005/12/15 5:55:00 發(fā)布:
總結(jié)一下樓主的觀點 以下幾點,是摘于樓主的帖子: 1、既然全部為單字指令,程序區(qū)中又無數(shù)據(jù),那么它跑飛后不管落到何處都應(yīng)是正軌,怎會死循環(huán)呢?就像是一個不存在死循環(huán)的時序邏輯電路,無論多強干擾,都不應(yīng)造成器件死循環(huán)吧?(最多造成個別循環(huán)周期不準) 2、 不想在這里討論哲學(xué)問題,請諸位不要在個別字眼上糾纏不清了。 世事無絕對,對一個人,長于其有生之年的事務(wù)對他而言就可稱為永遠。對一件產(chǎn)品來講,只要在其使用壽期內(nèi)不死機,我就稱他為永不死機。這是工程師的語言,不是哲學(xué)家的語言。 3、永遠就是比玩完多一秒 樓上怎么還在這個字眼上糾纏?那我告訴你吧,當(dāng)你GF對你說她永遠愛你時她的意思是:在你玩完之前! 4、此生最怕和兩種人說話,一種是潑婦,一種是哲學(xué)家。前者一點邏輯性沒有,你跟他沒法說理。后者邏輯性太強,往往抓住你一點點概念上的問題將你批個體無完膚,你也沒法跟他說理。 //------------------------------------------------ 1、死機不只是死循環(huán),就算是程序前后“不正!碧D(zhuǎn)也是錯誤,就算還在“運行”也不見得是正軌。 比如未經(jīng)“正式操作”,你兒子出世,打死你也不會認帳。因為跳過了某個“操作程序”就有做DNA的必要。(本來不想舉例,但生怕樓主又說我只喊口號) 2、從這個觀點來看,樓主認為工程師的語言和哲學(xué)家的語言是不同的。 3、這個說法相當(dāng)搞笑。將虛擬語氣用于替換嚴格定義的概念。引申解釋一下你的“永遠”的定義,當(dāng)你GF對你說她永遠愛你時她的意思是:在你玩完之前!也就是你玩完之前不再愛你,斷氣之前馬上換人。(原來如此,難怪會恨潑婦。) 4、樓主在論題中,多次提到哲學(xué)家和哲學(xué),認為哲學(xué)的觀點在這里是不能用的,因為哲學(xué)的邏輯和推理性太強。為什么會怕哲學(xué)呢?“哲學(xué)”這個詞在古希臘文里的意思是“愛智慧”,近代又認為是研究其它科學(xué)的科學(xué),是科學(xué)的基礎(chǔ)。試想,如果不講邏輯推理,還到處與人辨理,有理還是無理? 我從沒懷疑過別人的IQ,也不懷疑自己的IQ; 樓主沒懷疑過別人的IQ,但是懷疑自己的IQ。 這就是根本所在。 * - 本貼最后修改時間:2005-12-15 5:57:19 修改者:cf100 |
|
| 80樓: | >>參與討論 |
| 作者: analogman 于 2005/12/15 8:59:00 發(fā)布:
累了吧?喝口水。。。 前面一帖中最后一句話本來沒好意思說,現(xiàn)在可以說了:見了第一種人我就裝聾,見了第二種人我就作啞,樓上這位兼有這兩種人的氣質(zhì),我就只好裝聾作啞了。 * - 本貼最后修改時間:2005-12-15 9:08:27 修改者:analogman |
|
| 81樓: | >>參與討論 |
| 作者: cf100 于 2005/12/15 9:28:00 發(fā)布:
如果失去邏輯推理能力,懷疑自己的智商,還有什么不敢想象 |
|
| 82樓: | >>參與討論 |
| 作者: analogman 于 2005/12/15 10:17:00 發(fā)布:
是啊,看來是做不了工程師了,改行做算命先生吧 試解先生之名諱: C -- Callet F -- Philosopher (從音) 100 -- 100% 如果冒犯了先生,千萬別往心里去。沒有惡意,只是覺得好玩,逗大家一樂。笑一笑十年少!恕罪。 |
|
| 83樓: | >>參與討論 |
| 作者: 清竹流水 于 2005/12/15 11:13:00 發(fā)布:
暈,異想天開,只是理想吧 |
|
| 84樓: | >>參與討論 |
| 作者: linqing171 于 2005/12/15 11:35:00 發(fā)布:
主要看干擾大小 如果在電源上加上一個正負8000V的瞬間脈沖,脈沖窄一點保證不重新啟動,如果保護不好內(nèi)部的存儲器\寄存器\程序指針PC都可能被干擾成了另外一個數(shù). 結(jié)果就飛了. 一個辦法是把后面非程序區(qū)所有的地方都填寫上 nop nop nop nop jump 0000 不過也有不管用的時候. |
|
| 85樓: | >>參與討論 |
| 作者: analogman 于 2005/12/15 11:45:00 發(fā)布:
我的理想不是夢 是異想天開,是理想,但不是夢。前面不是已經(jīng)有人給出了兩個例子嗎?當(dāng)然了,太簡單,沒有實用價值。但別忘了,無極生太極,太極生兩儀,兩儀生四象,四象生八卦,八卦生萬物。。。(嗨!還是算命先生) |
|
| 86樓: | >>參與討論 |
| 作者: linqing171 于 2005/12/15 11:49:00 發(fā)布:
面條? 傳說中的面條程序? 這個程序我感覺很難寫.軟件就不是工程了.編譯器倒是比較好做了.子函數(shù)全部都要被連接N遍,省了判斷重入\遞歸等東西了. 為了提高效率,在你的程序的有效區(qū)最后還是加一個 jump 0000 呵呵. 你進入程序的時候還需要初始化.結(jié)果你觸發(fā)任務(wù)的條件就被初始化了. 以下是引用 gbchang 發(fā)表于 2005-12-7 18:02 侃單片機 ←返回版面 >現(xiàn)有結(jié)構(gòu)就可以實現(xiàn)了:不用向前跳轉(zhuǎn),不用堆棧,編碼填滿整... >現(xiàn)有51結(jié)構(gòu)就可以實現(xiàn)了: >不用向前跳轉(zhuǎn), >不用堆棧, >不用中斷, >所有代碼前后加"nop" >編碼填滿整個程序?qū)ぶ房臻g,到頭后自然循環(huán)。 >任務(wù)用時間觸發(fā), >事件由條件觸發(fā), >如此設(shè)計程序,跑飛與否都一樣在"正確"執(zhí)行。 >除非一直往一個地方飛,嘿嘿,那就沒辦法了。 * - 本貼最后修改時間:2005-12-16 20:03:45 修改者:linqing171 |
|
| 87樓: | >>參與討論 |
| 作者: szqingliu 于 2005/12/15 15:27:00 發(fā)布:
也會死循環(huán)! 如果你的pc指針突然跳到一個循環(huán)當(dāng)中,而且跳出循環(huán)的標志位始終不滿足,就死循環(huán)了!^_^哈哈 |
|
| 88樓: | >>參與討論 |
| 作者: cf100 于 2005/12/15 15:33:00 發(fā)布:
理窮詞盡也不必如此 這樣解釋別人的用戶名的確有點邏輯不清,樓主懷疑自己的智商,也不用如此來進行證明。而且21IC中帶C的用戶名多得是,21IC、computer00如果一個一個字母讓你拆,豈非個個都罪惡滔天了? 如果不加字母拆字那才有點邏輯,比如ANALOGMAN 顯然是ANA-LOG-MAN。后二個很通用,不多解釋。前一個,只有二個明顯的含意,ANA:1、安娜 2、全日空(日本航空公司)。我這樣拆字,總比樓主要講點道理吧。前一個可以證明你為什么怕潑婦,后一個可以解釋你為什么怕哲學(xué)家。當(dāng)然如果你的取名用心是處心積慮的話,這就不是什么智商問題了。如果看了覺得有趣,樓主也可以笑一笑就算了。 * - 本貼最后修改時間:2005-12-15 15:45:56 修改者:cf100 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |