日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是 PendSV

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是 PendSV 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:可懸起異常,如果我們把它配置為最低優先級,那么如果同時有多個異常被觸發,他會再其他異常執行完畢后再執行,而且任何異常都可以打斷它。

PendSV典型使用場合是上下文切換時(在不同任務之間切換)上下文切換被觸發的場合可以是:

(1):執行一個系統調用。 比如?? ??? ??? ??? ?OSSched(); ? // 執行任務調用。

(2):系統滴答定時器(SYSTICK)中斷,(輪轉調度中需要)。

讓我們舉個簡單的例子來輔助理解。假設有這么一個系統,里面有兩個就緒的任務,并且通過SysTick異常啟動上下文切換。但若在產生 SysTick 異常時正在響應一個中斷,則 SysTick異常會被別的異常搶斷。在這種情況下,OS是不能執行上下文切換的,否則將使中斷請求被延遲,而且在真實系統中延遲時間還往往不可預知——任何有一丁點實時要求的系統都決不能容忍這 種事。因此,在 CM3 中也是嚴禁沒商量——如果 OS 在某中斷活躍時嘗試切入線程模式,將觸犯用法fault異常。

為解決此,早期的OS 大多會檢測當前是否有中斷在活躍,只要無任何中斷響應時,才執行上下文切換。然而這種方法的弊端在于,它回使任務切換 延遲很久(因為如果搶斷了 IRQ,則本次Systick 不得進行上下文切換)。特別是當中斷源的頻率和Systick一致,使得上下文切換遲遲不能運行。現在使用PendSV異常會自動延遲上下文請求,直到別的中斷都處理完了。如果OS檢測到某IRQ正在活動并且被Systick搶占,他將懸起一個PendSV異常,以便緩期執行上下文切換。

使用PendSV控制上下文切換 步驟如下:

1:任務A呼叫SVC ?請求任務切換 (等待某些工作完成)?? ??? ?OSTaskSemPend ((OS_TICK ? )等

2:OS收到請求,做好上下文準備并且懸起一個PendSV異常

3當CPU進入SVC后,它立刻進入PendSV,從而執行上下文切換。

4當PendSV切換完成,將返回任務B,同時進入線程模式

5發生了一個中斷,并且中斷服務程序開始運行。

6 在ISR執行過程中,發生Systick異常,并且搶占了ISR

7OS執行并要的操作,并且懸起PendSV以做好上下文切換準備

8當Systick中斷退出,回到先前被搶斷的中斷,ISR繼續執行

9ISR執行完畢,執行PendSV上下文切換

10當PendSV執行完畢回到任務A同時系統再次進入線程模式


uCOS的PendSV的處理代碼

在UCOS/PORT? os_cpu_a.s 中


?? ??? ??? ??? ??? ?

總結

以上是生活随笔為你收集整理的什么是 PendSV的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。