學(xué)習(xí)中遇到ostasksuspend該怎么用
時(shí)間:2018-03-08作者:華清遠(yuǎn)見
做過單片機(jī)的,相比都用過51、STM32等等系列,當(dāng)今比較主流的單片機(jī)以STM32系列的為主,當(dāng)在用STM32單片機(jī)一段時(shí)間之后就會(huì)手癢癢去嘗試使用一下操作系統(tǒng),那么就一定會(huì)接觸到uC/OS-II,說到uC/OS-II那么就一定會(huì)有任務(wù)這樣的概念。 任務(wù)在創(chuàng)建后將從睡眠態(tài)轉(zhuǎn)換到就緒態(tài),就緒的任務(wù)如果調(diào)用OSTaskSuspend將被阻塞,也就是被剝奪CPU的使用權(quán)而暫時(shí)中止運(yùn)行,轉(zhuǎn)到阻塞狀態(tài)。通過OSTaskSuspend將任務(wù)轉(zhuǎn)到阻塞態(tài)被稱為掛起任務(wù)。 被掛起的任務(wù)不能運(yùn)行,知道其他任務(wù)以該任務(wù)的優(yōu)先級(jí)作為參數(shù)調(diào)用OSTaskResume來(lái)恢復(fù)它,才能將該任務(wù)的狀態(tài)重新設(shè)置為就緒狀態(tài)。當(dāng)該任務(wù)是就緒的最高優(yōu)先級(jí)的任務(wù)時(shí),又可以得到調(diào)度而重新占領(lǐng)CPU,回到運(yùn)行態(tài)。 一個(gè)任務(wù)如果無(wú)事可做,且優(yōu)先級(jí)又較高,長(zhǎng)期占有CPU,那么其他的任務(wù)將得不到運(yùn)行而“餓死”。因此,任務(wù)在不需要運(yùn)行的時(shí)候應(yīng)該放棄CPU,掛起就是其中的一種策略,除此之外還有任務(wù)延時(shí)等策略。
由上圖可知,在運(yùn)行過程的任務(wù)因?yàn)檎{(diào)用OSTaskSuspend而被掛起到阻塞態(tài)。阻塞態(tài)的任務(wù)因?yàn)槠渌蝿?wù)以該任務(wù)的優(yōu)先級(jí)作為參數(shù)調(diào)用OSTaskResume而得到恢復(fù),恢復(fù)到就緒態(tài)。就緒的任務(wù)在優(yōu)先級(jí)變?yōu)樽罡叩那闆r下最終得到了運(yùn)行。 值得注意的是,掛起一個(gè)任務(wù)并非將其轉(zhuǎn)換掛起態(tài),而是阻塞態(tài)。任務(wù)因?yàn)橹袛嗍PU控制權(quán)才會(huì)轉(zhuǎn)換為掛起態(tài),掛起態(tài)的任務(wù)在中斷結(jié)束后直接回到運(yùn)行態(tài)。這兩者是有明顯的區(qū)別的。 函數(shù)OSTaskSuspend用來(lái)暫時(shí)停止一個(gè)任務(wù)的執(zhí)行,將任務(wù)轉(zhuǎn)換為阻塞態(tài)。如果傳遞給OSTaskSuspend的參數(shù)是OS_PRIO_SELF,則將阻塞自己,如果prio是其他任務(wù)的優(yōu)先級(jí),則將阻塞其他的就緒任務(wù)。 根據(jù)該函數(shù)執(zhí)行過程中的各種情況,返回值包括: OS_ERR_NONE:如果成功掛起一個(gè)任務(wù) OS_ERR_TASK_SUSPEND_IDLE:如果試圖阻塞空閑任務(wù)。 OS_ERR_PRIO_INVALID:非法的優(yōu)先級(jí) OS_ERR_TASK_SUSPEND_PRIO:要掛起的任務(wù)不存在 OS_ERR_TASK_NOT_EXITS:要掛起使用互斥信號(hào)量的任務(wù)。 另外有一點(diǎn)需要特別注意的是,如果掛起了一個(gè)任務(wù),那么要注意這個(gè)任務(wù)是否在等待某些事件的發(fā)生,需要防止在事件發(fā)生的時(shí)候阻塞了的任務(wù)因?yàn)槭录陌l(fā)生而運(yùn)行。 調(diào)用時(shí)要十分小心,如果你想掛起一個(gè)等待事件(郵箱,消息,隊(duì)列)的任務(wù),事件到來(lái)的時(shí)候你將阻止這個(gè)任務(wù)運(yùn)行。 注意:OSTaskSuspend()需要與OSTaskResume()恢復(fù)掛起的任務(wù)成對(duì)使用 相關(guān)資訊
發(fā)表評(píng)論
|
全國(guó)咨詢電話:400-611-6270,雙休日及節(jié)假日請(qǐng)致電值班手機(jī):15010390966
在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)
企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)
Copyright 2004-2018 華清遠(yuǎn)見教育科技集團(tuán) 版權(quán)所有 ,京ICP備16055225號(hào),京公海網(wǎng)安備11010802025203號(hào)