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

實時操作系統(tǒng)Free RTOS的詳細(xì)介紹
轉(zhuǎn)載:DIY:給單片機寫個實時操作系統(tǒng)內(nèi)核!

基于精簡指令集的RISC-V內(nèi)核的單片機
Green Hills Software 為 Imagination RISC-V CPU 增加量產(chǎn)就緒的 RTOS 和工具支持

評論