【SVC】
SVC(系統服務調用,亦簡稱系統調用)和PendSV(可懸起系統調用),它們多用在上了操作系統的軟件開發中。
SVC用於產生系統函數的調用請求。例如,操作系統通常不允許用戶程序直接訪問硬件,而是通過提供一些系統服務函數,讓用戶程序使用SVC發出對系統服務函數的調用請求,以這種方法調用它們來間接訪問硬件。因此,當用戶程序想要控制特定的硬件時,它就要產生一個SVC異常,然后操作系統提供的SVC異常服務程序得到執行,它再調用相關的操作系統函數,后者完成用戶程序請求的服務。
【兩個任務間通過SysTick進行輪轉調度的簡單模式】
【發生IRQ時上下文切換的問題】
【使用PendSV控制上下文切換】
事件流:
1、任務A呼叫SVC來請求任務切換(例如,等到某些工作完成);
2、OS接收到請求,做好上下文切換的准備,並且懸起一個PendSV異常;
3、當CPU退出SVC后,它立即進入PendSV,從而執行上下文切換;
4、當PendSV執行完畢后,將返回到任務B,同時進入線程模式;
5、發生了一個中斷,並且中斷服務程序已開始執行;
6、在ISR執行過程中,發生SysTick異常,並且搶占了該ISR;
7、OS執行必要的操作,然后懸起PendSV異常以作好上下文切換的准備;
8、當SysTick退出后,回到先前被搶占的ISR中,ISR繼續執行;
9、ISR執行完畢並退出后,PendSV服務程序開始執行,並且在里面執行上下文切換;
10、當PendSV執行完畢后,回到任務A,同時系統再次進入線程模式。