欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10463|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

uC/OS-II學(xué)習(xí)筆記—中斷管理

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51773 發(fā)表于 2013-7-26 13:43 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 xueren 于 2013-7-26 13:43 編輯

uC/OS-II是實(shí)時(shí)多任務(wù)操作系統(tǒng),系統(tǒng)的實(shí)時(shí)性主要體現(xiàn)在對(duì)中斷的響應(yīng)上,要求能夠盡可能快地響應(yīng)中斷,進(jìn)入中斷程序處理中斷請(qǐng)求。uC/OS-II還要求中斷服務(wù)程序運(yùn)行的時(shí)間不能過長(zhǎng),長(zhǎng)時(shí)間的運(yùn)行中斷服務(wù)程序會(huì)使系統(tǒng)中其他的任務(wù)得不到運(yùn)行,或使系統(tǒng)不能處理新的中斷。因此在中斷服務(wù)程序的設(shè)計(jì)上,必須做到短小精悍,而把復(fù)雜的處理過程通過消息等機(jī)制交給用戶任務(wù)來做。
uC/OS-II并沒有單獨(dú)的C語言文件來做中斷的處理。因?yàn)椴煌挠布到y(tǒng),中斷服務(wù)程序的編寫是完全不同的,操作系統(tǒng)中提供的中斷管理函數(shù)還是在內(nèi)核OS_core.c中。但是,對(duì)中斷服務(wù)程序的編寫必須根據(jù)uC/OS-II的思路來實(shí)現(xiàn)。
事實(shí)上,任務(wù)的調(diào)度也大多依靠中斷。我們知道,如果創(chuàng)建任務(wù)或調(diào)用OSTaskDelete(OSPrioSelf)刪除自己,或調(diào)用OSTaskSuspend(OSPrioSelf)阻塞自己,這時(shí)候這些函數(shù)會(huì)執(zhí)行一次任務(wù)切換。但更多的任務(wù)切換是時(shí)鐘中斷。時(shí)鐘中斷在每個(gè)時(shí)鐘滴答都發(fā)生,該中斷服務(wù)程序在發(fā)現(xiàn)了有更高優(yōu)先級(jí)的就緒任務(wù)就會(huì)進(jìn)行任務(wù)調(diào)度。當(dāng)操作系統(tǒng)有其他的中斷時(shí),如定時(shí)器中斷,外部中斷,串口中斷等等,只要中斷是打開的,而且正在運(yùn)行的任務(wù)并沒有關(guān)中斷,就會(huì)相應(yīng)中斷,這時(shí)任務(wù)就被切換了。因此,遵循uC/OS-II的中斷管理思路,設(shè)計(jì)好的中斷服務(wù)程序是使用好uC/OS=II的關(guān)鍵之一。
如果正在運(yùn)行的任務(wù)沒有關(guān)閉中斷,在中斷到來時(shí),操作系統(tǒng)將會(huì)響應(yīng)中斷,進(jìn)入中斷服務(wù)程序。這時(shí)任務(wù)的運(yùn)行環(huán)境還沒有保存,因此需要將任務(wù)的運(yùn)行環(huán)境保存。這時(shí)任務(wù)由于中斷的到來而進(jìn)入掛起狀態(tài),如下圖所示:

進(jìn)入中斷服務(wù)程序,首先將當(dāng)前正在運(yùn)行的任務(wù)的CPU環(huán)境保存。接著將中斷使用的一個(gè)重要全局變量 OSIntNesting加1,表示中斷嵌套深了一層。實(shí)現(xiàn)此功能的就是OSIntEnter函數(shù),該函數(shù)實(shí)現(xiàn)且只實(shí)現(xiàn)這一功能,程序如下所示:

由OSIntEnter代碼可知,中斷的嵌套存數(shù)要求小于255。在操作系統(tǒng)初始化過程中,OSIntNesting被初始化為0。如果原來沒有中斷服務(wù)程序在運(yùn)行,顯然OSIntNesting的值仍然是0,在這里由于進(jìn)入中斷服務(wù)程序,所以應(yīng)該加1。否則,將暫停正在運(yùn)行的其他中斷服務(wù)程序,而運(yùn)行本中斷服務(wù)程序,即發(fā)生中斷嵌套。如果中斷服務(wù)程序不希望把被打斷,很簡(jiǎn)單地執(zhí)行關(guān)中斷即可。所以,操作系統(tǒng)是允許中斷嵌套的,使不使用是另外一回事。
中斷服務(wù)程序應(yīng)該處理硬件的緊急操作,對(duì)于處理數(shù)據(jù)等操作,可以交給任務(wù)來完成。中斷服務(wù)程序和任務(wù)之間可以共享數(shù)據(jù)結(jié)構(gòu),中斷服務(wù)程序可以向任務(wù)發(fā)消息等?傊袛喾⻊(wù)程序的運(yùn)行事件不宜太長(zhǎng)。
中斷服務(wù)完成后,應(yīng)調(diào)用與OSIntEnter相匹配的OSIntExit來進(jìn)行最后的處理。OSIntExit函數(shù)是用來通知uC/OS-II已經(jīng)結(jié)束了中斷的操作。
OSIntEnter和OSIntExit是成對(duì)出現(xiàn)在os_core.c中的系統(tǒng)函數(shù),用戶的中斷服務(wù)程序中應(yīng)調(diào)用它們,按中斷管理的思路來進(jìn)行,才不會(huì)產(chǎn)生系統(tǒng)錯(cuò)誤。
我們知道,uC/OS-II在每個(gè)時(shí)間片都要進(jìn)行任務(wù)的調(diào)度。調(diào)度的結(jié)果或者是返回原來的任務(wù)繼續(xù)執(zhí)行,或者是因?yàn)檎业搅司途w的更高優(yōu)先級(jí)的任務(wù),而讓該任務(wù)運(yùn)行。這個(gè)時(shí)間片可以是10ms或者其他值。如果時(shí)間太長(zhǎng),高優(yōu)先級(jí)的就緒任務(wù)可能等待時(shí)間過長(zhǎng),如果時(shí)間短,花費(fèi)在操作系統(tǒng)調(diào)度上的時(shí)間就顯得過長(zhǎng),系統(tǒng)的吞吐量就變小。
時(shí)鐘中斷服務(wù)是依賴于中斷的,如果是單片機(jī)系統(tǒng),那么就設(shè)置為定時(shí)器中斷。用定時(shí)器中斷的服務(wù)程序來完成該功能是恰當(dāng)?shù)摹?br />
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:52318 發(fā)表于 2013-7-26 23:12 | 只看該作者
學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表