接著以WCH沁恒微電子的赤菟V103(CH32V103)和赤菟V307(CH32V307)兩款RISC-V內(nèi)核單片機(jī)來詳細(xì)說下針對(duì)RISC-V平臺(tái),移植實(shí)時(shí)操作系統(tǒng)的注意點(diǎn)。
今天聊下移植RTOS時(shí)RISC-V內(nèi)核時(shí)單片機(jī)任務(wù)之間的切換。
了解了如何切換至第一個(gè)任務(wù),如何實(shí)現(xiàn)不同任務(wù)之間的切換呢。在這之前想必對(duì)“任務(wù)優(yōu)先級(jí)”,“時(shí)間片輪轉(zhuǎn)”等概念有一定的了解。rt-thread正常運(yùn)行也需要個(gè)定時(shí)器為其提供時(shí)鐘,且任務(wù)初始化時(shí)設(shè)置了任務(wù)優(yōu)先級(jí)。調(diào)度器在就緒的任務(wù)列表中尋找優(yōu)先級(jí)較高的任務(wù)切換執(zhí)行,當(dāng)優(yōu)先級(jí)相同時(shí),調(diào)度器會(huì)按照設(shè)置的時(shí)間片大小來輪流調(diào)度線程,用時(shí)間片來約束任務(wù)的單次執(zhí)行時(shí)長(zhǎng)。不管因優(yōu)先級(jí)還是時(shí)間片耗盡,從當(dāng)前任務(wù)切換至新任務(wù)時(shí)均需要保存當(dāng)前任務(wù)的上下文至當(dāng)前任務(wù)的堆棧區(qū),獲取新任務(wù)的堆棧,并從新任務(wù)堆棧區(qū)恢復(fù)上下文,切換并執(zhí)行。
在ARM中,系統(tǒng)的滴答時(shí)鐘由內(nèi)核定時(shí)器Systick提供,并且在pendSV中進(jìn)行任務(wù)切換。類比RISC-V我們內(nèi)核提供了一個(gè)64bit
Systick定時(shí)器,同時(shí)也有軟中斷SW_handler(其實(shí)整個(gè)切換也不一定要在某個(gè)中斷中切換,只要做好上下文保存即可),需要切換時(shí),置位其相應(yīng)的pend位,即可觸發(fā)進(jìn)中斷,實(shí)現(xiàn)切換。rt-thread中用了三個(gè)全局變量,用于中斷切換上下文rt_interrupt_from_thread、rt_interrupt_to_thread、rt_thread_switch_interrupt_flag,前兩個(gè)分別用來存儲(chǔ)“from”線程sp指針和“to”線程的sp指針,當(dāng)需要切換時(shí),flag被函數(shù)rt_hw_context_switch_interrupt置位,并觸發(fā)進(jìn)軟中斷如圖1所示。在中斷中實(shí)現(xiàn)“from”到“to”線程的切換,并將flag清零。
圖1 中斷切換上下文
SW中斷函數(shù)同樣是一段匯編實(shí)現(xiàn)的代碼,內(nèi)容如下圖2所示,其中重點(diǎn)代碼已經(jīng)給出注釋,注意查看。從注釋可以看出,其相較于啟動(dòng)第一個(gè)任務(wù)多了開頭的就任務(wù)保存的過程。值得注意的是赤菟V307支持進(jìn)中斷后將硬件壓棧臨時(shí)關(guān)閉,這樣在上下文切換的時(shí)候可以手動(dòng)恢復(fù)我們想要的寄存器值,而當(dāng)中斷返回后,硬件壓棧自動(dòng)打開,不影響其他外設(shè)中斷使用硬件壓棧。而對(duì)于沒有此功能的赤菟V103來說,移植操作系統(tǒng)時(shí)不能打開硬件壓棧。
圖2 軟中斷切換上下文過程
對(duì)于其他的RTOS也是大同小異,例如鴻蒙LiteOS_M中有個(gè)g_losTask全局變量,其是個(gè)結(jié)構(gòu)體,內(nèi)部為兩個(gè)任務(wù)控制塊類型的指針,分別為*runTask指向當(dāng)前運(yùn)行的任務(wù),newTask指向要切換的新任務(wù),騰訊的TencentOS_Tiny中亦有兩個(gè)任務(wù)控制塊類型的指針k_curr_task指向當(dāng)前任務(wù),*k_next_task指向下一個(gè)要切換任務(wù)。這和rt-thread中的“from”和“to”是為異曲同工之處。通過管理操作這些變量,實(shí)現(xiàn)任務(wù)到任務(wù)的切換。
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634614 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40275 -
移植
+關(guān)注
關(guān)注
1文章
379瀏覽量
28124 -
實(shí)時(shí)操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
197瀏覽量
30753 -
RISC-V
+關(guān)注
關(guān)注
45文章
2270瀏覽量
46125
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論