μC/OS-II在80x86上的移植
OSMboxPost()
最小運行時間是當(dāng)郵箱是空的,沒有任務(wù)等待消息的時候。
最大運行時間是當(dāng)消息郵箱中有一個或多個任務(wù)在等待消息。此時,消息將發(fā)往等待隊列中優(yōu)先級最高的任務(wù),將此任務(wù)喚醒執(zhí)行。最大運行時間是同一任務(wù)執(zhí)行OSMboxPost()的累計時間,這個過程包括任務(wù)喚醒等待任務(wù),發(fā)送消息,調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSMboxPost()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時結(jié)束(處理延時結(jié)束情況的代碼最長—譯者注),最后返回調(diào)用任務(wù)。OSMboxPost()的最大運行時間是上述時間的總和。
OSMemGet()
最小運行時間是當(dāng)系統(tǒng)中已經(jīng)沒有內(nèi)存塊,OSMemGet()返回錯誤碼。
最大運行時間是OSMemGet()獲得了內(nèi)存塊,返回調(diào)用者。
OSMemPut()
最小運行時間是當(dāng)向一個已經(jīng)排滿的內(nèi)存分區(qū)中返回內(nèi)存塊。
最大運行時間是當(dāng)向一個未排滿的內(nèi)存分區(qū)中返回內(nèi)存塊
OSQPend()
最小運行時間是當(dāng)消息隊列中有消息需要處理的時候。
最大運行時間是當(dāng)消息隊列中沒有消息,任務(wù)需要等待的時候。此時調(diào)用OSQPend()的任務(wù)將被掛起,進(jìn)行任務(wù)切換。最大運行時間是同一任務(wù)執(zhí)行OSQPend()的累計時間,這個過程包括OSQPend()查看消息隊列,發(fā)現(xiàn)沒有消息,再調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSQPend()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時結(jié)束(處理延時結(jié)束情況的代碼最長—譯者注),最后返回調(diào)用任務(wù)。OSQ`Pend()的最大運行時間是上述時間的總和。
OSQPost()
最小運行時間是當(dāng)消息隊列是空的,沒有任務(wù)等待消息的時候。
最大運行時間是當(dāng)消息隊列中有一個或多個任務(wù)在等待消息。此時,消息將發(fā)往等待隊列中優(yōu)先級最高的任務(wù),將此任務(wù)喚醒執(zhí)行。最大運行時間是同一任務(wù)執(zhí)行OSQPost()的累計時間,這個過程包括任務(wù)喚醒等待任務(wù),發(fā)送消息,調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSQPost()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時結(jié)束(處理延時結(jié)束情況的代碼最長—譯者注),最后返回調(diào)用任務(wù)。OSQPost()的最大運行時間是上述時間的總和。
OSQPostFront()
此函數(shù)與OSQPost()的過程相同。
OSSemPend()
最小運行時間是當(dāng)信號量可獲取的時候(信號量計數(shù)器大于0)。
最大運行時間是當(dāng)信號量不可得,任務(wù)需要等待的時候。此時調(diào)用OSSemPend()的任務(wù)將被掛起,進(jìn)行任務(wù)切換。最大運行時間是同一任務(wù)執(zhí)行OSQPend()的累計時間,這個過程包括OSSemPend()查看信號量計數(shù)器,發(fā)現(xiàn)是0,再調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSSemPend()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時結(jié)束(處理延時結(jié)束情況的代碼最長—譯者注),最后返回調(diào)用任務(wù)。OSSemPend()的最大運行時間是上述時間的總和。
OSSemPost()
最小運行時間是當(dāng)沒有任務(wù)在等待信號量的時候。
最大運行時間是當(dāng)有一個或多個任務(wù)在等待信號量。此時,等待隊列中優(yōu)先級最高的任務(wù)將被喚醒執(zhí)行。最大運行時間是同一任務(wù)執(zhí)行OSSemPost()的累計時間,這個過程包括任務(wù)喚醒等待任務(wù),調(diào)用任務(wù)切換函數(shù)OSSched(),切換到新任務(wù)。當(dāng)由于某種原因調(diào)用OSSemPost()的任務(wù)又被喚醒執(zhí)行,從OSSched()中返回,發(fā)現(xiàn)返回的原因是由于延時結(jié)束(處理延時結(jié)束情況的代碼最長—譯者注),最后返回調(diào)用任務(wù)。OSSemPost()的最大運行時間是上述時間的總和。
OSTaskChangePrio()
最小運行時間是當(dāng)任務(wù)被改變的優(yōu)先級比當(dāng)前運行任務(wù)的低,此時不進(jìn)行任務(wù)切換,直接返回調(diào)用任務(wù)。
最大運行時間是當(dāng)任務(wù)被改變的優(yōu)先級比當(dāng)前運行任務(wù)的高,此時將進(jìn)行任務(wù)切換。
OSTaskCreate()
最小運行時間是當(dāng)調(diào)用OSTaskCreate()的任務(wù)創(chuàng)建了一個比自己優(yōu)先級低的任務(wù), 此時不進(jìn)行任務(wù)切換。
最大運行時間是當(dāng)調(diào)用OSTaskCreate()的任務(wù)創(chuàng)建了一個比自己優(yōu)先級高的任務(wù), 此時將進(jìn)行任務(wù)切換。
上述兩種情況都是假定OSTaskCreateHook()不進(jìn)行任何操作。
OSTaskCreateExt()
最小運行時間是當(dāng)OSTaskCreateExt()不對堆棧進(jìn)行清零操作(此項操作是為堆棧檢查函數(shù)做準(zhǔn)備的)。
最大運行時間是當(dāng)OSTaskCreateExt()需要進(jìn)行堆棧清零操作。但此項操作的時間取決于堆棧的大小。如果設(shè)清除每個堆棧單元(堆棧操作以字為單位—譯者注)需要100個時鐘周期(3μs),1000字節(jié)的堆棧將需要1,500μs(1000字節(jié)除以2再乘以3μs/每字)。在清除堆棧過程中中斷是打開的,可以響應(yīng)中斷請求。
上述兩種情況都是假定OSTaskCreateHook()不進(jìn)行任何操作。
OSTaskDel()
最小運行時間是當(dāng)被刪除的任務(wù)不是當(dāng)前任務(wù),此時不進(jìn)行任務(wù)切換。
最大運行時間是當(dāng)被刪除的任務(wù)是當(dāng)前任務(wù),此時將進(jìn)行任務(wù)切換。
OSTaskDelReq()
該函數(shù)很短,幾乎沒有最小和最大運行時間之分。
OSTaskResume()
最小運行時間是當(dāng)OSTaskResume()喚醒了一個任務(wù),但該任務(wù)的優(yōu)先級比當(dāng)前任務(wù)低,此時不進(jìn)行任務(wù)切換。
最大運行時間是OSTaskResume()喚醒了一個優(yōu)先級更高的任務(wù),此時將進(jìn)行任務(wù)切換。
OSTaskStkChk()
OSTaskStkChk()的執(zhí)行過程是從堆棧的底端開始檢查0的個數(shù),估計堆棧所剩的空間。
所以最小運行時間是當(dāng)OSTaskStkChk()檢查一個全部占滿的堆棧。 但實際上這種情況是不允許發(fā)生的,這將使系統(tǒng)崩潰。
最大運行時間是當(dāng)OSTaskStkChk()檢查一個全空堆棧,執(zhí)行時間取決于堆棧的大小。例如檢查每個堆棧單元(堆棧操作以字為單位—譯者注)需要80鐘周期(2.4μs),1000字節(jié)的堆棧將需要1,200μs(1000字節(jié)除以2再乘以2.4μs/每字)。再加上其他的一些操作,總共需要大約1,218μs。在檢查堆棧過程中中斷是打開的,可以響中斷請求。
OSTaskSuspend()
最小運行時間是當(dāng)被掛起的任務(wù)不是當(dāng)前任務(wù),此時不進(jìn)行任務(wù)切換。
評論