2017-01-07 56 views
0

我有興趣使用可訪問硬件堆棧的增強型MCU在XC8中編寫調度程序/ RTOS項目。在XC8中編寫調度程序/實時操作系統

我想弄清楚如何控制軟件堆棧的創建,這樣每個任務的軟件堆棧就會在通用RAM中得到一定的範圍。

從概念上講,這在ASM中很容易編程,但我希望能夠編寫C程序並將每個任務的軟件堆棧放入正確的地址空間。

似乎沒有辦法爲特定代碼段創建單獨的軟件堆棧,甚至創建多個軟件堆棧 - 我該怎麼做?

感謝

+0

對於8位PIC,您最多隻談8K ROM而不是大量RAM。您預計每個堆棧有多少空間 – cup

+0

Sub 250字節,這將允許大約4個任務s運行。此外,該設備具有線性滑條通道,可用於所有銀行轉換。 – FourierFlux

回答

0

堆棧切換是前述調度,而不是德編譯器的責任 - 所以你不會找到該一個編譯器選項。您必須在您打算編寫的調度程序中實現該功能 - 事實上,調度程序的功能大部分都是這樣。

在RTOS中,切換上下文涉及存儲與一個執行線程相關的所有寄存器,並將它們替換爲另一個線程。這包括替換堆棧指針 - 這就是在線程之間切換堆棧的方式。當程序計數器寄存器被加載時,上下文切換完成,從而跳轉到新線程的最後一個執行點(包括其所有寄存器,包括堆棧指針被恢復)

上下文切換本身必然涉及至少一個小大部分彙編代碼仍然可以用C語言編寫,而任務本身可以用C語言編寫。在Jean Labrosse關於μC/ OS-II的書籍 - freely available in PDF中提供了一個簡單的RTOS調度程序的很好的描述。描述了μC/ OS-II的PIC18端口here的下載地址。

+0

謝謝,是的,我明白。我在使用XC8控制軟件堆棧的位置時遇到了一個問題,並且使用適當的變量(所有東西都使用它所謂的「編譯堆棧」放在單獨的堆棧經文上。另外,我還有一個問題需要找出什麼註冊編譯器使用,或者是否可以指示它們來自特定區域的RAM。在ASM中,這將非常容易,但我覺得XC8用戶指南沒有給出有關編譯器實現的足夠詳細信息。 – FourierFlux

+0

您提到的書可以在這裏找到:https://www.micrium.com/books/ucosii/(你的鏈接鏈接到你自己的主文件夾!) –

+0

@JonathanV:謝謝,修正了鏈接。 – Clifford