接著以WCH沁恒微電子的赤菟V103(CH32V103)和赤菟V307(CH32V307)兩款RISC-V內(nèi)核單片機(jī)來詳細(xì)說下針對RISC-V平臺,移植實(shí)時(shí)操作系統(tǒng)的注意點(diǎn)。
今天聊下移植RTOS時(shí)RISC-V內(nèi)核時(shí)單片機(jī)切換至第一個任務(wù)。
以RT-Thread為例,rt-thread和其他RTOS有點(diǎn)區(qū)別的是其gcc下的入口函數(shù)定義為entry,而main函數(shù)則可以被初始化為線程之一,圖1為rt-thread的詳細(xì)的啟動流程。rt-thread定義一個rt_thread類型的全局指針rt_current_thread,用于實(shí)時(shí)獲取當(dāng)前運(yùn)行的線程。從圖9可知,硬件啟動后進(jìn)rtthread_startup,其開始進(jìn)行了必要的初始化,如系統(tǒng)滴答定時(shí)器、堆、串口、調(diào)度器、定時(shí)器、main線程、空閑idle線程等等,最后執(zhí)行了rt_system_scheduler_start后轉(zhuǎn)交調(diào)度器執(zhí)行。其內(nèi)容如下圖2所示。
圖1 rt_thread啟動流程
圖2 調(diào)度器啟動
由圖2可知,其會查找優(yōu)先級較高的就緒組優(yōu)先級,并根據(jù)該優(yōu)先級查找就緒鏈表,獲取優(yōu)先級較高的任務(wù)并得到控制塊to_thread,然后調(diào)用rt_hw_context_switch_to切換至該任務(wù)。其是一段匯編實(shí)現(xiàn)的代碼,傳入的參數(shù)為該任務(wù)的sp指針。由前文可知,我們可以根據(jù)to_thread->sp得到該任務(wù)的堆棧位置,該堆棧的頂部空間存儲了執(zhí)行該任務(wù)時(shí)cpu寄存器的值,由此也可推測該部分匯編代碼主要完成的就是從sp處恢復(fù)cpu寄存器值,并轉(zhuǎn)而執(zhí)行該任務(wù)。其代碼如下圖3所示,詳見注釋。
圖3 切換至第一個任務(wù)
由上注釋分析可知,rt_hw_context_switch_to通過傳入的sp,恢復(fù)cpu寄存器,其中mepc寄存器任務(wù)初始化時(shí)設(shè)置為任務(wù)的入口地址,ra寄存器設(shè)置為返回地址,其指向公用函數(shù)_rt_thread_exit。 當(dāng)mret返回后,pc更新為mepc值,即轉(zhuǎn)向執(zhí)行任務(wù)函數(shù),若其不是一個持續(xù)執(zhí)行的[while(1)]函數(shù),那么其返回至_rt_thread_exit,刪除該任務(wù),并切換至其他任務(wù)。 由此也可理解圖2中,最后一句注釋“never
come back”的含義了,一旦開始執(zhí)行任務(wù),pc值被改變,再不會回到調(diào)用的地方。
其他RTOS中也有和此匯編函數(shù)類似的匯編實(shí)現(xiàn),例如liteOS_M中的HalStartToRun,TencentOS_Tiny中的port_sched_start等。
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44622瀏覽量
638533 -
移植
+關(guān)注
關(guān)注
1文章
383瀏覽量
28193 -
RTOS
+關(guān)注
關(guān)注
22文章
819瀏覽量
119887 -
實(shí)時(shí)操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
199瀏覽量
30825 -
RISC-V
+關(guān)注
關(guān)注
45文章
2322瀏覽量
46592
發(fā)布評論請先 登錄
相關(guān)推薦
什么是實(shí)時(shí)操作系統(tǒng)(RTOS)
risc-v的mcu對RTOS兼容性如何
RISC-V中***會子活動之一:基于RISC-V的鴻蒙開發(fā)板設(shè)計(jì)
如何實(shí)現(xiàn)一個RISC-V內(nèi)核架構(gòu)的芯片移植工作
基于RT-Thread操作系統(tǒng)衍生rt-smart實(shí)時(shí)操作系統(tǒng)簡介
基于實(shí)時(shí)操作系統(tǒng)的單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)
關(guān)于單片機(jī)與嵌入式、操作系統(tǒng)與 RTOS之間的關(guān)系詳解
![關(guān)于<b class='flag-5'>單片機(jī)</b>與嵌入式、<b class='flag-5'>操作系統(tǒng)</b>與 <b class='flag-5'>RTOS</b>之間的關(guān)系詳解](https://file.elecfans.com/web1/M00/E7/BB/pIYBAGBhdA6ASybwAAAhJ_sOyHE674.png)
實(shí)時(shí)操作系統(tǒng)Free RTOS的詳細(xì)介紹
轉(zhuǎn)載:DIY:給單片機(jī)寫個實(shí)時(shí)操作系統(tǒng)內(nèi)核!
![轉(zhuǎn)載:DIY:給<b class='flag-5'>單片機(jī)</b>寫個<b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>內(nèi)核</b>!](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于精簡指令集的RISC-V內(nèi)核的單片機(jī)
基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(一)
![基于<b class='flag-5'>RISC-V</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>(一)](https://file.elecfans.com/web2/M00/8B/BD/poYBAGPYk3eAFTd8AAHqW9qrr3s910.png)
基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(二)
![基于<b class='flag-5'>RISC-V</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>(二)](https://file.elecfans.com/web2/M00/8C/45/pYYBAGPYq96ARIbwAAOAjPNk5hg719.png)
基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(四)
![基于<b class='flag-5'>RISC-V</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>(四)](https://file.elecfans.com/web2/M00/8B/C0/poYBAGPYrKSAZiuGAABE-NeiilA166.png)
Green Hills Software 為 Imagination RISC-V CPU 增加量產(chǎn)就緒的 RTOS 和工具支持
![Green Hills Software 為 Imagination <b class='flag-5'>RISC-V</b> CPU 增加量產(chǎn)就緒的 <b class='flag-5'>RTOS</b> 和工具支持](https://file1.elecfans.com//web2/M00/9D/7B/wKgZomToBI-ALGAGAABN8aBfIqc168.jpg)
評論