新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > μC/OS-II在80x86上的移植

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

        作者: 時間:2016-10-08 來源:網絡 收藏

        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()

        最小運行時間是當被掛起的任務不是當前任務,此時不進行任務切換。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 永春县| 池州市| 洛浦县| 文成县| 承德县| 夏河县| 东乡县| 神农架林区| 金塔县| 长汀县| 潮安县| 旬邑县| 西和县| 新沂市| 固镇县| 苏尼特右旗| 泸州市| 丹巴县| 巫溪县| 平湖市| 临猗县| 彩票| 武安市| 溧水县| 宜君县| 西充县| 灵璧县| 渭南市| 林甸县| 新民市| 错那县| 肥东县| 南江县| 怀远县| 石首市| 长武县| 镇沅| 富民县| 广灵县| 鹤山市| 麟游县|