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