?? 00000000.htm
字號:
一般而言CPU在執行中斷處理程序的時候是禁止中斷的,因為這樣可以避免編寫 <br />可重入的處理程序,如果此時允許中斷,那么處理程序必須是可重入的,這在內核 <br />代碼中是很麻煩,很耗資源的事情。 <br />要更快更即使地響應中斷必須使真正的中斷處理程序足夠短,只做一些必須做 <br />的事情,比如從外設讀數據到緩沖區,這也可以叫做前臺程序,而處理緩沖區數據 <br />的工作則又后臺程序完成,一般CPU在處理后臺程序的時候是允許中斷的。 <br />Linux里也是這樣的,它的中斷處理程序有一個上半部和下半部機制,上半部和前臺 <br />程序類似,一般禁止中斷,下半部類似于后臺程序,允許中斷。 <br />在《Linux設備驅動程序》里有個例子,可以讓并口拼命發中斷(需要9,10腳短接) <br />中斷處理程序用上下半部機制實現時的中斷處理速度比普通方式實現快很多。 <br />有些事情不是想當然就可以的,實際問題需要一些實際的經驗和技巧。 <br /> <br />【 在 wangyyff (郁悶的大面瓜) 的大作中提到: 】 <br />∶<i> 我的理解和你的好像不太一樣耶, </i><br />∶<i> 前后臺這種概念在沒有操作系統的嵌入式系統里講的很多,并不僅僅是限制在網絡應用 </i><br />∶<i> 下面引述邵老師的一段話: </i><br />∶<i> 前后臺系統是指不使用實時操作系統的嵌入式應用程序。一般做法是,寫一個無限循環 </i><br />∶<i> 的程序 </i><br />∶<i> ,在程序中查詢每個事件是否發生,每個任務是否具備運行條件,如果是,則處理這個 </i><br />∶<i> 事件或執行這個任務。這可以看成是一個后臺程序。 </i><br />∶<i> 而系統對中斷的響應可以看成是前臺程序,中斷的打入表示某事件的發生,在中斷服務 </i><br />∶<i> 子程序中,一般對中斷做一些簡單的處理,然后給出一個某事件發生了的標志,待后臺 </i><br />∶<i> 程序來處理。后臺可以叫作任務級,前臺叫作中斷級。 </i><br />在中斷服務程序里不對中斷作處理,只是置一個標志位,或者寫一個狀態字,然后由一個 <br />短時定時程序或無限循環程序來掃描這些標志位或狀態字,再啟動相應的處理程序,這不 <br />就相當于把原本可以一次完成的事情,拆成了兩段嗎?肯定要引入新的變量,增加跳轉時 <br />間,也就相當于增加了系統被干擾的機會,跳轉是程序最容易跑飛的時候,這樣做的好處 <br />是什么呢? <br />如果一次發生了多個中斷,那么啟動的處理程序應該是相當于一個線程,或是一個任務, <br />應該是獨立運行的,這時這個短時定時程序或無限循環程序要啟動多個線程,而此時多線 <br />程之間的通訊以及對線程根據優先級進行頻繁的執行、掛起,卻要由內核來做?那么這個 <br /> <br />核來管理這些中斷信號?還是你說的這個程序本身就是內核呢? <br />我覺得這個流程就好像是 <br /> <br />中斷信號1,2,3。。。->程序,得到標志位或狀態字->啟動線程->內核管理線程 <br /> <br />那么為什么不直接 <br /> <br />中斷信號1,2,3。。。->內核->啟動和管理線程 <br /> <br />愚人之見。 <br />請大家就這個問題深入探討探討吧! <br /> <br /> <br /> <br /> <br />-- <br /> <br /> <br /> <br />-- <br /> <br />※ 來源:·BBS 水木清華站 smth.org·[FROM: 166.111.33.82] <br />發信人: hongchen (kissing-fire), 信區: Embedded <br />標 題: Re: 又一道嵌入試題! <br />發信站: BBS 水木清華站 (Thu Nov 8 22:00:10 2001) <br /> <br /> <br />【 在 ncic (yiran) 的大作中提到: 】 <br />∶<i> 大面瓜說的是有道理,有依據的, </i><br />∶<i> 中斷處理程序分成兩部分可以更快更及時地的響應中斷,更少地丟失中斷信號 </i><br />∶<i> 一般而言CPU在執行中斷處理程序的時候是禁止中斷的,因為這樣可以避免編寫 </i><br />∶<i> 可重入的處理程序,如果此時允許中斷,那么處理程序必須是可重入的,這在內核 </i><br />∶<i> 代碼中是很麻煩,很耗資源的事情。 </i><br />內核是不是指嵌入式操作系統的內核? <br />還是泛指任何操作系統? <br />還是任何核心程序? <br />∶<i> 要更快更即使地響應中斷必須使真正的中斷處理程序足夠短,只做一些必須做 </i><br />∶<i> 的事情,比如從外設讀數據到緩沖區,這也可以叫做前臺程序,而處理緩沖區數據 </i><br />∶<i> 的工作則又后臺程序完成,一般CPU在處理后臺程序的時候是允許中斷的。 </i><br />∶<i> Linux里也是這樣的,它的中斷處理程序有一個上半部和下半部機制,上半部和前臺 </i><br />∶<i> 程序類似,一般禁止中斷,下半部類似于后臺程序,允許中斷。 </i><br />∶<i> 在《Linux設備驅動程序》里有個例子,可以讓并口拼命發中斷(需要9,10腳短接) </i><br />實際系統中恐怕不會出現這種情況吧, <br />肯定應該通過主系統精確定時來觸發這種外部頻繁事件吧 <br />否則這種中斷,恐怕沒有哪個系統能承受得了,這么頻繁的進行中斷,系統不死機才怪! <br /> <br />∶<i> ................... </i><br />好久沒有和人深入討論問題了,真是覺得高興! <br /> <br />-- <br /> <br />※ 來源:·BBS 水木清華站 smth.org·[FROM: 166.111.60.132] <br />發信人: flyking (小排), 信區: Embedded <br />標 題: Re: 又一道嵌入試題! <br />發信站: BBS 水木清華站 (Thu Nov 8 22:58:28 2001) <br /> <br />我想內核應該是指操作系統,但是寫這些程序時,就把他們想象成除此以外的 <br />處理就行了,經確定時的問題肯定是不行的,因為任何外部中斷都有可能隨時發生 <br />而很多必須立即做出響應的 <br />【 在 hongchen (kissing-fire) 的大作中提到: 】 <br />∶<i> 內核是不是指嵌入式操作系統的內核? </i><br />∶<i> 還是泛指任何操作系統? </i><br />∶<i> 還是任何核心程序? </i><br />∶<i> 實際系統中恐怕不會出現這種情況吧, </i><br />∶<i> 肯定應該通過主系統精確定時來觸發這種外部頻繁事件吧 </i><br />∶<i> 否則這種中斷,恐怕沒有哪個系統能承受得了,這么頻繁的進行中斷,系統不死機才怪! </i><br />∶<i> 好久沒有和人深入討論問題了,真是覺得高興! </i><br /> <br /> <br />-- <br /> 起初,神創造天地。地是空虛混沌,淵面黑暗;神的靈運行在水面上。 <br />神說:"要有光"。就有了光。神看光是好的,就把光暗分開了。神稱光 <br />為"晝",稱暗為"夜"。 <br /> <br /> <br />※ 來源:·BBS 水木清華站 smth.org·[FROM: 210.52.211.247] <br />發信人: wangyyff (郁悶的大面瓜), 信區: Embedded <br />標 題: Re: 又一道嵌入試題! <br />發信站: BBS 水木清華站 (Fri Nov 9 08:40:52 2001) <br /> <br /> <br />為什么頻繁中斷就會把系統搞死?說說看 <br />精確定時?系統的實時性何在? <br /> <br />【 在 hongchen (kissing-fire) 的大作中提到: 】 <br />∶<i> 內核是不是指嵌入式操作系統的內核? </i><br />∶<i> 還是泛指任何操作系統? </i><br />∶<i> 還是任何核心程序? </i><br />∶<i> 實際系統中恐怕不會出現這種情況吧, </i><br />∶<i> 肯定應該通過主系統精確定時來觸發這種外部頻繁事件吧 </i><br />∶<i> 否則這種中斷,恐怕沒有哪個系統能承受得了,這么頻繁的進行中斷,系統不死機才怪! </i><br />∶<i> 好久沒有和人深入討論問題了,真是覺得高興! </i><br /> <br /> <br />-- <br />===================================================================== <br />新域名啟動: <br /> 英文版:<a href="http://www.cfly.org">http://www.cfly.org</a> <br /> 中文版:<a href="http://wangyunfei.yeah.net">http://wangyunfei.yeah.net</a> <br /> <br /> ARM (32位RISC) + RTEMS (完全FREE的軍用操作系統), <br /> <br /> <br />※ 來源:·BBS 水木清華站 smth.org·[FROM: 203.93.105.209] <br />發信人: neuronlee (機械化神經元), 信區: Embedded <br />標 題: Re: 又一道嵌入試題! <br />發信站: BBS 水木清華站 (Fri Nov 9 11:02:25 2001) <br /> <br />我想你說的是進程間通信巴.各種通信機制不同,實現方法也不同. <br />在傳統的UNIX中,發SIGNAL實際上就是在進程控制塊中的數據結構 <br />中置相應的位.但發消息就不太一樣了,因為涉及到數據傳輸, <br />所以在進程內存空間分離的情況嚇要進行內存拷貝,在許多嵌入式 <br />操作系統中因為內存空間是統一的,所以僅傳送指針就行了. <br />但中段有其特殊性,就是不能阻塞.這是極其重要的. <br />【 在 wheregone (貓貓) 的大作中提到: 】 <br />∶<i> 實際上 在中斷里發消息或mail,物理上也是置標志位 </i><br />∶<i> 對不對? </i><br /> <br /> <br />-- <br />According to the system log, windows had already started, but <br />it seems to be murdered mysteriously! :-DDDDDDDD <br /> <br /> <br />※ 來源:·BBS 水木清華站 smth.org·[FROM: 66.75.17.82] <br />發信人: neuronlee (機械化神經元), 信區: Embedded <br />標 題: Re: 又一道嵌入試題! <br />發信站: BBS 水木清華站 (Fri Nov 9 11:04:15 2001) <br /> <br />他不過是在沒OS的情況嚇實現一個簡單的調度程序而已. <br />【 在 hongchen (kissing-fire) 的大作中提到: 】 <br />∶<i> 雖然你已經受不了我了 </i><br />∶<i> 不過我還是想把這個問題弄明白 </i><br />
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -