|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于uC/OS-II中臨界區(qū)代碼保護(hù)的理解,不知對(duì)否? |
| 作者:ganssle 欄目:嵌入式系統(tǒng) |
所謂的“臨界區(qū)代碼”就是指該代碼從邏輯上來說不可分割或中斷。為了確!芭R界區(qū)代碼”,必須在進(jìn)入臨界區(qū)之前關(guān)中斷,退出以后開中斷。 對(duì)于單任務(wù)(或前后臺(tái)系統(tǒng))而言,若關(guān)中斷,即可對(duì)“臨界區(qū)代碼”進(jìn)行有效的保護(hù)。而對(duì)于多任務(wù)的內(nèi)核環(huán)境而言,個(gè)人認(rèn)為有困惑的地方。 禁止中斷可以有效地防止其他的ISR來對(duì)臨界區(qū)代碼進(jìn)行修改。但是,禁止中斷并不能禁止調(diào)度。若此時(shí),出現(xiàn)另外的任務(wù)優(yōu)先級(jí)高的任務(wù)(不會(huì)被ISR激活,但可能延遲時(shí)間到),CPU的執(zhí)行權(quán)將交給該任務(wù)。而該任務(wù)有可能對(duì)臨界區(qū)代碼進(jìn)行修改。這又如何能夠有效地保護(hù)臨界區(qū)代碼呢? 正確的理解在于: 當(dāng)關(guān)閉中斷以后,根本就不會(huì)出現(xiàn)優(yōu)先級(jí)高的任務(wù)處于“ready(等待運(yùn)行)”的狀態(tài)。若進(jìn)入“臨界區(qū)代碼”的任務(wù)優(yōu)先級(jí)較低,而且存在更高優(yōu)先級(jí)的任務(wù)被阻塞。阻塞的原因可能是正在等待某個(gè)資源可用,或自身調(diào)用OSTimeDly()或OSTimeDlyHMSM()進(jìn)行延遲。否則,低優(yōu)先級(jí)的任務(wù)根本就不可能獲得CPU的控制權(quán)。首先,由于關(guān)閉了中斷,就不會(huì)進(jìn)入ISR。因而就不可能在ISR中使得某個(gè)資源可用,進(jìn)而不可能激活高優(yōu)先級(jí)的任務(wù)。第二,由于關(guān)閉了中斷,系統(tǒng)時(shí)鐘節(jié)拍中斷就不會(huì)響應(yīng),因而延遲時(shí)間就不可能到,進(jìn)而也不可能使得高優(yōu)先級(jí)的任務(wù)運(yùn)行。 不知上述理解是否正確,清高手評(píng)判! 謝謝。! |
| 2樓: | >>參與討論 |
| 作者: dmcz 于 2005/9/28 19:42:00 發(fā)布:
假如我進(jìn)了臨界5秒鐘的時(shí)間還沒出來,這意味著什么? |
|
| 3樓: | >>參與討論 |
| 作者: ganssle 于 2005/9/29 11:55:00 發(fā)布:
沒見過這么設(shè)計(jì)的 設(shè)計(jì)的臨界區(qū)代碼不可能、也不允許占用這么長的時(shí)間。 否則將導(dǎo)致不能響應(yīng)中斷、不能調(diào)度。 |
|
| 4樓: | >>參與討論 |
| 作者: arwei 于 2005/9/29 15:05:00 發(fā)布:
什么是rtos ? rtos要的就是很快響應(yīng) |
|
| 5樓: | >>參與討論 |
| 作者: sailz 于 2005/9/29 22:20:00 發(fā)布:
我的看法 os2有一個(gè)應(yīng)用原則, 就是說在調(diào)用系統(tǒng)應(yīng)用時(shí)中斷必須是開著的, 否則系統(tǒng)可能會(huì)崩潰.你去看JJL的書,上面說的很明白(系統(tǒng)應(yīng)用需要定時(shí)中斷維系它的正常運(yùn)轉(zhuǎn)). 任務(wù)切換算是系統(tǒng)應(yīng)用之一. 所謂調(diào)度的實(shí)現(xiàn)方式如何呢? 我想這你的程序設(shè)計(jì)結(jié)構(gòu)有關(guān),你可以把調(diào)度 任務(wù)切換寫在中斷里,也可以寫在中斷之外(某些系統(tǒng)應(yīng)用就是如此!). 所以我覺得"禁止中斷并不能禁止調(diào)度" 不對(duì),應(yīng)該是禁止中斷時(shí)不要引發(fā)調(diào)度. 還有這句" 當(dāng)關(guān)閉中斷以后,根本就不會(huì)出現(xiàn)優(yōu)先級(jí)高的任務(wù)處于“ready(等待運(yùn)行)”的狀態(tài)"........應(yīng)該是: 關(guān)閉中斷之前,你是否正確的進(jìn)行了調(diào)度,如果正確的調(diào)度了,當(dāng)然不會(huì)有優(yōu)先級(jí)高的任務(wù)處于ready...(普通情況) 它和關(guān)閉中斷與否沒有必然的因果關(guān)系. 大家是怎么想的? |
|
| 6樓: | >>參與討論 |
| 作者: eleven11 于 2005/9/30 10:07:00 發(fā)布:
一句話:“盡可能不通過關(guān)中斷保護(hù)會(huì)有預(yù)料之外數(shù)值的寄存器” 真正的理解關(guān)中斷的意義就這一句話了,并非是全局變量就關(guān)中斷,也并非會(huì)被破壞的全局變量一定要關(guān)中斷保護(hù)…………………… 很多很多,總結(jié)的就那一句話,具體的情況應(yīng)用只有個(gè)人自己實(shí)踐和思考中才能體會(huì) * - 本貼最后修改時(shí)間:2005-9-30 10:09:43 修改者:eleven11 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |