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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

PendSV异常介绍、用于上下文切换

發布時間:2023/12/13 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 PendSV异常介绍、用于上下文切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這里,非常感謝《cortex-cm3權威指南》的翻譯者。

PendSV 的典型使用場合是在上下文切換時(在不同任務之間切換)。 例如, 一個系統中有兩個就緒的任務,上下文切換被觸發的場合可以是:

1 執行一個系統調用

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

讓我們舉個簡單的例子來輔助理解。假設有這么一個系統,里面有兩個就緒的任務,并且通過 SysTick 異常啟動上下文切換。如圖 7.15 所示。

上圖是兩個任務輪轉調度的示意圖。但若在產生 SysTick 異常時正在響應一個中斷,則SysTick 異常會搶占其 ISR。在這種情況下, OS 不得執行上下文切換,否則將使中斷請求被延遲,而且在真實系統中延遲時間還往往不可預知——任何有一丁點實時要求的系統都決不能容忍這種事。因此,在 CM3 中也是嚴禁沒商量——如果 OS 在某中斷活躍時嘗試切入線程模式,將觸犯用法 fault 異常。

為解決此問題,早期的 OS 大多會檢測當前是否有中斷在活躍中,只有沒有任何中斷需要響應時,才執行上下文切換(切換期間無法響應中斷)。然而,這種方法的弊端在于,它可以把任務切換動作拖延很久(因為如果搶占了 IRQ,則本次 SysTick 在執行后不得作上下

文切換,只能等待下一次 SysTick 異常),尤其是當某中斷源的頻率和 SysTick 異常的頻率比較接近時,會發生“共振”。

現在好了, PendSV 來完美解決這個問題了。PendSV 異常會自動延遲上下文切換的請求,

直到其它的 ISR 都完成了處理后才放行。為實現這個機制,需要把 PendSV 編程為最低優先級的異常。如果 OS 檢測到某 IRQ 正在活動并且被 SysTick 搶占,它將懸起一個 PendSV 異常,以便緩期執行上下文切換。如圖 7.17 所示:

個中事件的流水賬記錄如下:

1. 任務 A 呼叫 SVC 來請求任務切換(例如,等待某些工作完成)

2. OS 接收到請求,做好上下文切換的準備,并且 pend 一個 PendSV 異常。

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

4. 當 PendSV 執行完畢后,將返回到任務 B,同時進入線程模式。

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

6. 在 ISR 執行過程中,發生 SysTick 異常,并且搶占了該 ISR。

7. OS 執行必要的操作,然后 pend 起 PendSV 異常以作好上下文切換的準備。

8. 當 SysTick 退出后,回到先前被搶占的 ISR 中, ISR 繼續執行

9. ISR 執行完畢并退出后, PendSV 服務例程開始執行,并且在里面執行上下文切換

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

這就是PendSV切換上下文的介紹!

總結

以上是生活随笔為你收集整理的PendSV异常介绍、用于上下文切换的全部內容,希望文章能夠幫你解決所遇到的問題。

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