新聞中心

μC/OS-II在80x86上的移植

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

OSMboxPost()

最小運(yùn)行時(shí)間是當(dāng)郵箱是空的,沒(méi)有任務(wù)等待消息的時(shí)候。

最大運(yùn)行時(shí)間是當(dāng)消息郵箱中有一個(gè)或多個(gè)任務(wù)在等待消息。此時(shí),消息將發(fā)往等待隊(duì)列中優(yōu)先級(jí)最高的任務(wù),將此任務(wù)喚醒執(zhí)行。最大運(yùn)行時(shí)間是同一任務(wù)執(zhí)行OSMboxPost()的累計(jì)時(shí)間,這個(gè)過(guò)程包括任務(wù)喚醒等待任務(wù),發(fā)送消息,調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSMboxPost()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時(shí)結(jié)束(處理延時(shí)結(jié)束情況的代碼最長(zhǎng)—譯者注),最后返回調(diào)用任務(wù)。OSMboxPost()的最大運(yùn)行時(shí)間是上述時(shí)間的總和。

OSMemGet()

最小運(yùn)行時(shí)間是當(dāng)系統(tǒng)中已經(jīng)沒(méi)有內(nèi)存塊,OSMemGet()返回錯(cuò)誤碼。

最大運(yùn)行時(shí)間是OSMemGet()獲得了內(nèi)存塊,返回調(diào)用者。

OSMemPut()

最小運(yùn)行時(shí)間是當(dāng)向一個(gè)已經(jīng)排滿的內(nèi)存分區(qū)中返回內(nèi)存塊。

最大運(yùn)行時(shí)間是當(dāng)向一個(gè)未排滿的內(nèi)存分區(qū)中返回內(nèi)存塊

OSQPend()

最小運(yùn)行時(shí)間是當(dāng)消息隊(duì)列中有消息需要處理的時(shí)候。

最大運(yùn)行時(shí)間是當(dāng)消息隊(duì)列中沒(méi)有消息,任務(wù)需要等待的時(shí)候。此時(shí)調(diào)用OSQPend()的任務(wù)將被掛起,進(jìn)行任務(wù)切換。最大運(yùn)行時(shí)間是同一任務(wù)執(zhí)行OSQPend()的累計(jì)時(shí)間,這個(gè)過(guò)程包括OSQPend()查看消息隊(duì)列,發(fā)現(xiàn)沒(méi)有消息,再調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSQPend()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時(shí)結(jié)束(處理延時(shí)結(jié)束情況的代碼最長(zhǎng)—譯者注),最后返回調(diào)用任務(wù)。OSQ`Pend()的最大運(yùn)行時(shí)間是上述時(shí)間的總和。

OSQPost()

最小運(yùn)行時(shí)間是當(dāng)消息隊(duì)列是空的,沒(méi)有任務(wù)等待消息的時(shí)候。

最大運(yùn)行時(shí)間是當(dāng)消息隊(duì)列中有一個(gè)或多個(gè)任務(wù)在等待消息。此時(shí),消息將發(fā)往等待隊(duì)列中優(yōu)先級(jí)最高的任務(wù),將此任務(wù)喚醒執(zhí)行。最大運(yùn)行時(shí)間是同一任務(wù)執(zhí)行OSQPost()的累計(jì)時(shí)間,這個(gè)過(guò)程包括任務(wù)喚醒等待任務(wù),發(fā)送消息,調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSQPost()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時(shí)結(jié)束(處理延時(shí)結(jié)束情況的代碼最長(zhǎng)—譯者注),最后返回調(diào)用任務(wù)。OSQPost()的最大運(yùn)行時(shí)間是上述時(shí)間的總和。

OSQPostFront()

此函數(shù)與OSQPost()的過(guò)程相同。

OSSemPend()

最小運(yùn)行時(shí)間是當(dāng)信號(hào)量可獲取的時(shí)候(信號(hào)量計(jì)數(shù)器大于0)。

最大運(yùn)行時(shí)間是當(dāng)信號(hào)量不可得,任務(wù)需要等待的時(shí)候。此時(shí)調(diào)用OSSemPend()的任務(wù)將被掛起,進(jìn)行任務(wù)切換。最大運(yùn)行時(shí)間是同一任務(wù)執(zhí)行OSQPend()的累計(jì)時(shí)間,這個(gè)過(guò)程包括OSSemPend()查看信號(hào)量計(jì)數(shù)器,發(fā)現(xiàn)是0,再調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSSemPend()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時(shí)結(jié)束(處理延時(shí)結(jié)束情況的代碼最長(zhǎng)—譯者注),最后返回調(diào)用任務(wù)。OSSemPend()的最大運(yùn)行時(shí)間是上述時(shí)間的總和。

OSSemPost()

最小運(yùn)行時(shí)間是當(dāng)沒(méi)有任務(wù)在等待信號(hào)量的時(shí)候。

最大運(yùn)行時(shí)間是當(dāng)有一個(gè)或多個(gè)任務(wù)在等待信號(hào)量。此時(shí),等待隊(duì)列中優(yōu)先級(jí)最高的任務(wù)將被喚醒執(zhí)行。最大運(yùn)行時(shí)間是同一任務(wù)執(zhí)行OSSemPost()的累計(jì)時(shí)間,這個(gè)過(guò)程包括任務(wù)喚醒等待任務(wù),調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSSemPost()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時(shí)結(jié)束(處理延時(shí)結(jié)束情況的代碼最長(zhǎng)—譯者注),最后返回調(diào)用任務(wù)。OSSemPost()的最大運(yùn)行時(shí)間是上述時(shí)間的總和。

OSTaskChangePrio()

最小運(yùn)行時(shí)間是當(dāng)任務(wù)被改變的優(yōu)先級(jí)比當(dāng)前運(yùn)行任務(wù)的低,此時(shí)不進(jìn)行任務(wù)切換,直接返回調(diào)用任務(wù)。

最大運(yùn)行時(shí)間是當(dāng)任務(wù)被改變的優(yōu)先級(jí)比當(dāng)前運(yùn)行任務(wù)的高,此時(shí)將進(jìn)行任務(wù)切換。

OSTaskCreate()

最小運(yùn)行時(shí)間是當(dāng)調(diào)用OSTaskCreate()的任務(wù)創(chuàng)建了一個(gè)比自己優(yōu)先級(jí)低的任務(wù), 此時(shí)不進(jìn)行任務(wù)切換。

最大運(yùn)行時(shí)間是當(dāng)調(diào)用OSTaskCreate()的任務(wù)創(chuàng)建了一個(gè)比自己優(yōu)先級(jí)高的任務(wù), 此時(shí)將進(jìn)行任務(wù)切換。

上述兩種情況都是假定OSTaskCreateHook()不進(jìn)行任何操作。

OSTaskCreateExt()

最小運(yùn)行時(shí)間是當(dāng)OSTaskCreateExt()不對(duì)堆棧進(jìn)行清零操作(此項(xiàng)操作是為堆棧檢查函數(shù)做準(zhǔn)備的)。

最大運(yùn)行時(shí)間是當(dāng)OSTaskCreateExt()需要進(jìn)行堆棧清零操作。但此項(xiàng)操作的時(shí)間取決于堆棧的大小。如果設(shè)清除每個(gè)堆棧單元(堆棧操作以字為單位—譯者注)需要100個(gè)時(shí)鐘周期(3μs),1000字節(jié)的堆棧將需要1,500μs(1000字節(jié)除以2再乘以3μs/每字)。在清除堆棧過(guò)程中中斷是打開(kāi)的,可以響應(yīng)中斷請(qǐng)求。

上述兩種情況都是假定OSTaskCreateHook()不進(jìn)行任何操作。

OSTaskDel()

最小運(yùn)行時(shí)間是當(dāng)被刪除的任務(wù)不是當(dāng)前任務(wù),此時(shí)不進(jìn)行任務(wù)切換。

最大運(yùn)行時(shí)間是當(dāng)被刪除的任務(wù)是當(dāng)前任務(wù),此時(shí)將進(jìn)行任務(wù)切換。

OSTaskDelReq()

該函數(shù)很短,幾乎沒(méi)有最小和最大運(yùn)行時(shí)間之分。

OSTaskResume()

最小運(yùn)行時(shí)間是當(dāng)OSTaskResume()喚醒了一個(gè)任務(wù),但該任務(wù)的優(yōu)先級(jí)比當(dāng)前任務(wù)低,此時(shí)不進(jìn)行任務(wù)切換。

最大運(yùn)行時(shí)間是OSTaskResume()喚醒了一個(gè)優(yōu)先級(jí)更高的任務(wù),此時(shí)將進(jìn)行任務(wù)切換。

OSTaskStkChk()

OSTaskStkChk()的執(zhí)行過(guò)程是從堆棧的底端開(kāi)始檢查0的個(gè)數(shù),估計(jì)堆棧所剩的空間。

所以最小運(yùn)行時(shí)間是當(dāng)OSTaskStkChk()檢查一個(gè)全部占滿的堆棧。 但實(shí)際上這種情況是不允許發(fā)生的,這將使系統(tǒng)崩潰。

最大運(yùn)行時(shí)間是當(dāng)OSTaskStkChk()檢查一個(gè)全空堆棧,執(zhí)行時(shí)間取決于堆棧的大小。例如檢查每個(gè)堆棧單元(堆棧操作以字為單位—譯者注)需要80鐘周期(2.4μs),1000字節(jié)的堆棧將需要1,200μs(1000字節(jié)除以2再乘以2.4μs/每字)。再加上其他的一些操作,總共需要大約1,218μs。在檢查堆棧過(guò)程中中斷是打開(kāi)的,可以響中斷請(qǐng)求。

OSTaskSuspend()

最小運(yùn)行時(shí)間是當(dāng)被掛起的任務(wù)不是當(dāng)前任務(wù),此時(shí)不進(jìn)行任務(wù)切換。



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉