|
|||||||||||
| 技術(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 |
學(xué)習(xí)uC/OS-II任務(wù)調(diào)度的疑惑,就緒態(tài)如何進(jìn)入運(yùn)行態(tài)? |
| 作者:birder 欄目:嵌入式系統(tǒng) |
看《uC/OS-II(第二版)》P79的那個(gè)任務(wù)切換的狀態(tài)機(jī),結(jié)合它的源碼, 感覺很不明白: 就緒態(tài)進(jìn)入運(yùn)行態(tài)只能通過(guò)三個(gè)系統(tǒng)調(diào)用,即OSStart(),OSIntExit(), OS_TASK_SW()。 但是,比如當(dāng)前運(yùn)行的是空閑任務(wù)OS_TaskIdle(),而空閑任務(wù)當(dāng)中不包含它們當(dāng)中的任何一個(gè)系統(tǒng)調(diào)用;我還看了OSTimeTick()中的代碼也不包含它們中的任何一個(gè)。 那么,其它高優(yōu)先級(jí)的任務(wù)就緒了,怎么能從就緒態(tài)進(jìn)入到運(yùn)行態(tài)呢? 小弟剛接觸操作系統(tǒng),請(qǐng)大家不吝賜教,謝謝!:) |
| 2樓: | >>參與討論 |
| 作者: WalKerOne 于 2005/9/22 20:18:00 發(fā)布:
這個(gè)任務(wù)是在沒有其他任何任務(wù)進(jìn)入就緒態(tài)時(shí)才運(yùn)行的把? |
|
| 3樓: | >>參與討論 |
| 作者: birder 于 2005/9/23 8:14:00 發(fā)布:
是 但如果其它任務(wù)進(jìn)入就緒狀態(tài),其它任務(wù)怎么獲得處理器呢? |
|
| 4樓: | >>參與討論 |
| 作者: birder 于 2005/9/23 8:53:00 發(fā)布:
任務(wù)狀態(tài)定義 書上那個(gè)任務(wù)狀態(tài)機(jī)轉(zhuǎn)換的圖中,那些狀態(tài)uC/OS-II中都沒有定義呀? 相反的,uCOS_II.H中有如下的狀態(tài)定義: ********************************************************************************************************* * TASK STATUS (Bit definition for OSTCBStat) ********************************************************************************************************* */ #define OS_STAT_RDY 0x00 /* Ready to run */ #define OS_STAT_SEM 0x01 /* Pending on semaphore */ #define OS_STAT_MBOX 0x02 /* Pending on mailbox */ #define OS_STAT_Q 0x04 /* Pending on queue */ #define OS_STAT_SUSPEND 0x08 /* Task is suspended */ #define OS_STAT_MUTEX 0x10 /* Pending on mutual exclusion semaphore */ #define OS_STAT_FLAG 0x20 /* Pending on event flag GROUP */ 跟書上的狀態(tài)也不一樣啊,連一個(gè)起碼的"OS_STAT_RUNNING"都沒有,書上的狀態(tài)機(jī)哪兒來(lái)的? |
|
| 5樓: | >>參與討論 |
| 作者: mabaoqiu 于 2005/9/23 17:59:00 發(fā)布:
OS_TASK_SW() 系統(tǒng)定時(shí)中斷函數(shù)中有OS_TASK_SW()。應(yīng)該是在OSTimeTick()中,再找一下吧! |
|
| 6樓: | >>參與討論 |
| 作者: heaven_wu 于 2005/9/23 22:36:00 發(fā)布:
再仔細(xì)看一下代碼 外部事件發(fā)生時(shí),就會(huì)引起相關(guān)信號(hào)量或一些可用資源的產(chǎn)生,就會(huì)使就續(xù)的任務(wù)進(jìn)入就緒態(tài),你可以再看一下信號(hào)量發(fā)送和等待的一段代碼,具體我就不詳細(xì)說(shuō)了。 |
|
| 7樓: | >>參與討論 |
| 作者: 焊出個(gè)未來(lái) 于 2005/9/24 3:47:00 發(fā)布:
我也是新手,多看源碼 我?guī)缀鯖]看過(guò)書,看源碼幫助挺大的,半天基本可以初步了解uCOS最基本的運(yùn)行機(jī)制,比你啃書好多了。 OSIntCtxSw()在OSIntExit()中有調(diào)用,每發(fā)生一次時(shí)鐘節(jié)拍都會(huì)產(chǎn)生一次if (--ptcb->OSTCBDly == 0) ,然后你應(yīng)該知道會(huì)發(fā)生什么,不知道就看代碼吧。 |
|
| 8樓: | >>參與討論 |
| 作者: birder 于 2005/9/24 8:08:00 發(fā)布:
謝謝大家 我想我應(yīng)該清楚了:) |
|
| 9樓: | >>參與討論 |
| 作者: zhuph 于 2005/9/25 8:54:00 發(fā)布:
uc/os中沒有OS_STAT_RUNNING uc/os中沒有運(yùn)行狀態(tài)所對(duì)應(yīng)的宏定義。 一個(gè)低優(yōu)先級(jí)任務(wù)被高優(yōu)先級(jí)任務(wù)搶先,而進(jìn)行上下文切換的時(shí)機(jī),在于當(dāng)高優(yōu)先級(jí)任務(wù)就緒時(shí),會(huì)調(diào)用OSSched()。 這一點(diǎn)很關(guān)鍵。 |
|
| 10樓: | >>參與討論 |
| 作者: 最愛韶涵 于 2005/9/25 12:21:00 發(fā)布:
OSSched()中調(diào)用OS_TASK_SW(),使就緒任務(wù)進(jìn)入運(yùn)行狀態(tài) |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |