2016-07-04 71 views
0

我正在爲ARM Cortex-M4內核編寫一個小型操作系統,並且有一些疑問。我決定通過Supervisor Call(SVC)來放置os功能,在這裏我保留並維護所有內核對象和內核函數。Arm cortex-m4自定義操作系統設計

但是,這是一個好主意,因爲所有內核代碼都執行並佔用用戶任務堆棧嗎?

唯一讓我想到的是,在執行內核代碼時,通過主管調用跳轉到內核堆棧並鎖定調度器。這種方法很好嗎?

+1

你試圖解決什麼問題? –

回答

1

在Cortex-M上,您有一個進程堆棧指針(PSP)和一個主堆棧指針(MSP)。中斷使用主堆棧指針,任務應該使用進程堆棧指針。因此,在SVC中完成的任何內核工作都使用MSP,因此不應干擾使用PSP的任務堆棧。切換任務時,您將PSP設置爲新堆棧。我將閱讀Cortex-M4通用用戶指南的異常處理部分。另外,我建議您閱讀並閱讀ARM Cortex M3/M4的權威指南,因爲這裏有關於RTOS的很好的部分。 Cortex的設計採用了RTOS,並提供了許多有用的功能。

注意:除非您將此作爲學習練習,或者只是真的想編寫自己的操作系統,否則您最好使用FreeRTOS等經過良好測試的產品,並提供您可能遇到的所有功能使用。

+0

感謝您的回覆,我誤解了異常發生時的堆疊。我再次閱讀這部分,現在一切都很清楚。發生異常時,堆棧位於正在運行的堆棧上,但異常處理髮生在MSP堆棧上。順便說一句,這只是爲了學習的目的...... :) – user2782192

+0

是的,它需要一點理解。文件可能會更好。我仍然建議你看看FreeRTOS,它有很多Cortex的可移植層,這是學習如何做事/參考的好方法。 –