2013-01-25 122 views
0

我應該使用IRQ模式處理調度程序嗎?我的意思是我使用定時器中斷,並在中斷過程中,我放置了一個代碼來保存環境(寄存器,stac),選擇一個新任務並加載它的環境。我看到有些系統是基於SVC的,我猜想它的軟件中斷模式。我的方式是否正確?如何實現上下文切換而不使用定時器中斷程序呢?實時操作系統調度程序處理

//編輯

我差點忘了,還有一件事,讓我好奇。如何用c語言保存環境?我們沒有直接訪問物理寄存器。如何使用堆棧?

+0

這個問題還有很多。它可能會被關閉,FYI。這不是一個單一的,具體的,可回答的問題。您正在詢問有關中斷,上下文切換,異步和同步搶佔等問題。您可能要開始[在此問題](http://stackoverflow.com/questions/11602395/difference-between-preemption-and-context-開關)。 – Dan

+0

這真的很有幫助,我會經歷這個話題。令人驚訝的是,它尚未關閉。 –

回答

0

「我應該使用IRQ模式處理調度程序嗎?」沒有答案。使用任何你想要的,IRQ模式可以用於調度程序中斷,但是你也將不得不從任務正在運行的任務中重新安排任務,除非你能夠在軟件中掛起一箇中斷,否則不能從IRQ處理程序輕鬆完成。

您是否正在編寫調度程序以獲得樂趣?我可以理解你爲什麼想這樣做,但是如果你想要一個商業項目的調度程序,那麼你將會更好地獲得一個已經工作並且功能強大的 - 有很多!有些人和我一樣,都是專業素質和專業支持,但卻是免費的,所以你爲什麼要寫自己的? (http://www.freertos.org)

+0

這是正確的我知道threre在互聯網上有很多rtos,但我不想在這方面賺錢。我只是想了解它在實踐中是如何工作的。 –

0

IRQ模式需要硬件中斷,而SVC可以通過SWI進入。在通用RTOS中,硬件中斷不是唯一的調度事件。 IPC,定時器,延時到期和同步機制也將啓動任務重新安排。出於這個原因,SVC模式會更合適。

但這隻與舊ARM架構有關;例如Cortex-M在這方面有很大的不同,旨在使RTOS的實現更加簡單和高效。 CSMIS庫包括RTOS和調度原語,您可以從中構建功能全面的RTOS或調度程序。

相關問題