wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3727|回復: 0
收起左側

RISC-V MCU開發實戰 (三):移植鴻蒙OS項目

[復制鏈接]
ID:809235 發表于 2021-10-28 19:54 | 顯示全部樓層 |閱讀模式
軟件平臺:MounRiver Studio( MRS);硬件平臺: CH32V307開發板
先去碼云上將源碼克隆下來:
https://gitee.com/openharmony/kernel_liteos_m
新建一個CH32V307的工程,將源碼直接拖到工程中,就添加進來了,然后去添加頭文件路徑即可
1.png
源碼中包含比較全面,我們可以選擇不需要的部分將其排除在編譯之外,
2.png
操作方法為右鍵目錄或文件,點擊Include/Exclude From Build菜單項恢復編譯,同樣的方法再選一遍即可。

下面說些移植操作系統的注意事項

ARM上移植實時操作系統大家可能比較熟悉,對于RISC-V內核的MCU,可能相對比較陌生。下面結合WCH的CH32V103和CH32V307兩款芯片來詳細說下針對RISC-V平臺,移植實時操作系統的注意點。

在移植前,有必要對RISC-V的一些基本知識點有一定的了解,這里對RISC-V的概況,發展,指令集,特權模式等不作詳述,僅結合WCH的RISC-V內核的MCU,簡單介紹我們移植實時操作系統有可能遇到的關鍵點做一下描述。這里之所以選取V103和V307兩款芯片,主要其極具代表性:

首先,直觀上其外設的使用方法和我們之前熟悉的F103,F107等是兼容的,這樣降低了我們使用和移植時的難度,基于WCH提供的外設庫,我們以前上層的代碼甚至于不用修改可直接使用。其次,V103是WCH RISC-V內核家族中的V3內核,V307為V4內核,V3內核支持RV32IMAC指令集,即除支持RISC-V基本的32位整數指令集外,還支持硬件乘除法,原子指令,壓縮指令。V4在V3的基礎上增加了單精度硬件浮點,并且其性能也比V3高。
除上述之外,雖然兩者的中斷控制器(PFIC)相較于現行的PLIC均不同,均不是統一入口,而是采用中斷向量表尋址的方式,但是V3的中斷向量表處存放是一條指令,而V4的向量表既可以存放指令,也可以存放中斷處理函數的地址。兩者均支持中斷嵌套和硬件壓棧,區別在于V3最大嵌套兩級,V4最大可達八級,同時V3的硬件壓棧深度兩級,V4的硬件壓棧深度為三級。這里需要注意的是,移植實時操作系統時需要關閉硬件壓棧,在切換任務時所有寄存器,我們希望是由我們自己控制其壓棧和出棧的內容。

RISC-V寄存器如下圖所示,其中x0-x31為整形寄存器,f0-f31為浮點寄存器(V3沒有浮點寄存器)。所有帶caller的寄存器,當發生中斷時需要保存,值得注意的是,WCH的硬件壓棧保存的寄存器僅僅保存整數的16個caller saved 寄存器。正常一個中斷函數的寄存器保存我們不用關心,編譯器會幫我們做的很好。但是當我們從一個匯編入口進中斷函數的時候這些過程就不得不由我們自己來實現。寄存器中幾個相對特殊的x0恒為0,x1是返回地址寄存器ra,函數調用時用來存放返回地址,x2為堆棧指針sp,x3為gp全局指針,用來尋址全局變量。對于一個正常運行的程序,除了x0,gp兩個初始值固定的外,其余的均會是不確定的,所有在進行上下文保護時,均需要保存。用到硬件浮點的時候,更是要保存32個浮點寄存器。
3.png
除了上述的寄存器,移植還要關心的是幾個csr寄存器mstatus,mepc。正常情況下大部分csr只能在機器模式下操作(WCH的v3和v4內核支持機器模式和用戶模式)。mstatus中,MIE為中斷使能,當進中斷時MPIE更新為MIE,返回時MIE更新為MPIE。MPP用于保存進中斷之前的特權模式,如果我們設置其為MPP=0b11,那么將一直處于機器模式,其mret返回后還是處于機器模式。mepc是機器模式下異常程序指針,其只會在發生異常是被更新(中斷也是一類異常),進異常時我們可以從另外兩個csr寄存器mcause來看引起異常原因通過mtval查看引起異常時的值。當從異常返回時mepc的值被更新給pc。我們正是通過進中斷修改mepc來實現任務的切換的,后面會詳細說明這個過程。

實時操作系統大家應該不陌生,常見的uCOS,FreeRTOS,RT-Thread,LiteOS-M等等,其基本的思路都是一樣的,需要一個定時器用于系統時間片的實現,一個中斷用于任務切換。想要其能夠在一個MCU上成功的跑起來,需要弄清除一下幾個事情:

(1)進中斷需要保存哪些內容。
從之前的描述中,應該知道,對于risc-v內核來說其進中斷壓棧的是caller saved的寄存器。從下圖一可以看出,進Systick中斷函數,先進行寄存器保存,退出中斷時進行寄存器恢復,如果開啟硬件浮點,同時還會對浮點寄存器進行保存和恢復。這個過程是編譯器幫我們實現,有一點需要注意的是我們移植的代碼里面進中斷后獲取了中斷的堆棧“csrrw sp,mscratch,sp”,返回時恢復了線程的堆棧指針“csrrw sp,mscratch,sp”中斷堆棧指針初始值是在任務開始時存入mscratch寄存器的,如果采用C形式中斷函數,中斷堆棧的獲取會在壓棧操作之后,中斷壓入的堆棧是當前運行任務的任務堆棧區域,如果想要中斷函數壓棧時壓入的自己的堆棧區域,可以使用匯編入口,進中斷后先修改sp,然后壓棧,再調用中斷處理函數,如圖二所示。
4.png
圖1
5.png
圖2
(2)任務棧需要保存哪些內容。
前文說過對于一個正常運行的程序,切換任務前,除了x0恒0,x3 gp指針外,其余的寄存器均需要保存,每個RTOS中都會定義一個上下文保存相關的結構體,這里我們以華為鴻蒙LiteOS_M為例,看一下這個結構體:
6.png
圖3
在創建任務的時候均會為一個任務分配一個id和堆棧大小并對這個堆棧做初始化:
7.png
圖4
8.png
圖5
任務創建好了后會關聯一個根據任務id關聯一個任務控制塊taskCB,總的任務個數是在頭文件中配置的(target_config.h)總的任務塊的初始化也是在LOS_KernelInit被初始化。
9.png
圖6
從上面可以看出來,task--->taskCB--->sp指針--->memory這樣的路線,而這片memory開始位置用于上下文保存。
這樣的方式在其他RTOS中也可以看到,例如RT-Thread中用于上下文保存的結構體rt_hw_stack_frame,和taskCB類似的結構體rt_thread等。
10.png
圖7
11.png
圖8

(3)如何開啟任務調度。
前面看了每個任務上下文保存位置,注意到堆棧初始化的時候把任務的入口地址給了context->epc。同時LiteOS_M源碼中定義了一個LosTask類型的全局變量g_losTask,其內部只有兩個任務控制塊指針,一個指向當前運行的任務,一個指向新任務,即要切換至的任務。
12.png
圖9
當做好一系列初始化后,LiteOS會調用HalStartSchedule來初始化系統節拍定時器,并注冊系統定時器的中斷處理函數,然后開始轉向執行第一個任務,如下圖所示:
13.png
圖10
其中OsSchedStart函數從任務列表中獲取第一個任務,并賦值給g_losTask里面的runTask和newTask。然后調用HalStartToRun轉向執行runTask所指示的任務。HalStartToRun是一段匯編代碼,下面就具體看其如何切換至runTask,具體如下圖的注釋:
14.png
圖11
這樣mret之后就轉向去執行第一個任務,并且不會再有返回,因為每個任務本身會是個循環,這里也就能理解其源碼注釋 never return的含義。
15.png
圖12
其他操作系統中也有類似的操作,例如RT-Thread中有個rt_hw_context_switch_to函數,其也是匯編代碼實現,它是一個帶參數的函數,其傳入的參數為(&to_thread->sp),如下圖:
16.png
圖13
從名字就可以看出,傳遞的參數為啟動執行的第一個線程的控制塊的堆棧指針sp的值,后面賦值mepc,mstatus,其他寄存器等等都是和LiteOS_M一致的。
(4)如何進行任務切換。
了解了如何切換至第一個任務,那么如何實現不同任務之間的切換呢,在這之前我們應該都有了解,RTOS是根據任務的優先級和時間片進行輪轉的,每個任務執行一段時間,然后切換至下一個任務執行。每次切換前我們需要把當前任務的運行狀態進行保存,然后切換至新任務,對其運行狀態進行恢復,如此循環反復,實現任務調度。時間片實現使用的是內核的SysTick定時器,LiteOS_M是在los_timer.c中實現的,這個只需要根據實際硬件的進行初始化就行。其他操作系統也是類似,像RT-Thread源碼中我們根據硬件完成board.c。對于任務切換,我們利用內核的軟中斷,只要使能該中斷,并且當需要切換任務時,把中斷控制器的對應的pendset位置1,即可觸發該中斷進行任務切換。下圖是liteOS_M切換過程:
17.png
圖14

18.png
圖15
其他操作系統也是大同小異,具體的區別僅僅是在切換新任務時,新任務如何獲取的問題,上圖可以看到LiteOS_M是通過g_losTask來管理,RT-Thread中定義了from_thread,to_thread,顧名思義從一個線程切換至另外一個線程。
弄清楚以上的問題,對于某一個RTOS的基本移植來說應該就比較明了。
最后移植好的鴻蒙os,RT-Thread等實時操作系統的代碼均已在MRS上線,可以直接創建,開發相關應用
19.png

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
青青青国产在线| 亚洲の无码国产の无码步美| 色婷婷**av毛片一区| 99久久精品免费观看| 国产精品亚洲片在线播放| av网站在线免费| 成年女人色毛片免费| 国产黄a三级三级三级| 五月天综合视频| 日韩欧美精品在线观看视频| 国产伦理久久久| 欧美精品videofree1080p| 欧美乱妇23p| 欧美国产精品中文字幕| 三级亚洲高清视频| 欧美系列电影免费观看| 丁香久久综合| yellow91字幕网在线| 国模私拍视频| 国产精品综合久久久久| 国产伦理一区二区| 日日碰狠狠躁久久躁婷婷| 国产精品高清一区二区三区| 日韩一区二区电影在线| 亚洲精品水蜜桃| bt7086福利一区国产| 性8sex亚洲区入口| 欧美mv日韩| 国内视频在线精品| 欧美综合社区国产| gogo高清午夜人体在线| 免费在线黄色电影| 男人天堂av网站| 精品国产www| 青青草原国产免费| 精品国产一区二区三区久久狼黑人 | 久久人妻一区二区| 91九色在线观看视频| 在线免费观看成人网| 精品一区二区三区自拍图片区 | 国内精品卡一卡二卡三| 中文精品一区二区三区| 成人9ⅰ免费影视网站| 国产精品久久久久久久av电影| 777亚洲妇女| 欧美色视频日本高清在线观看| 青青草成人在线观看| 91欧美精品| 毛片视频免费播放| 五月天丁香社区| 91亚洲免费视频| 久久久久狠狠高潮亚洲精品| 精品无码国产一区二区三区av| 一区二区精品免费视频| 77777少妇光屁股久久一区| 久久韩国免费视频| 一区二区三区亚洲| 中日韩美女免费视频网址在线观看 | 日本欧美视频| 美女久久久久| av毛片午夜不卡高**水| 午夜羞羞小视频在线观看| 色的视频在线免费看| 极品美乳网红视频免费在线观看 | 亚洲色图欧美制服丝袜另类第一页| 日韩午夜三级在线| 精品日韩成人av| 亚洲成色999久久网站| 精品国产髙清在线看国产毛片 | 国产网红在线| 成人看片app| 色中文字幕在线| 亚洲av无码专区在线| 一本色道久久综合熟妇| 99久久婷婷国产一区二区三区 | 成年人在线网站| 九九在线免费视频| 日本xxxwww免费视频| 免费黄漫在线观看| eeuss影院第1页在线| 成视频免费在线看| 中文字幕在线资源| 国产大片在线免费观看| 久久99精品久久久久久野外| 怡红院在线观看| 成人影院av| www.成人在线.com| 日韩欧美天堂| 免费视频成人| 视频免费一区二区| 国产成人影院| 一区二区三区在线观看免费| 亚洲国产片色| 韩国成人在线视频| 久久免费国产精品| 一区二区三区精品| 亚洲澳门在线| 国内久久精品| 美女尤物国产一区| 亚洲精品欧美| 久久99精品一区二区三区| 亚洲高清av| 亚洲区综合中文字幕日日| 伊人久久成人| 久久97超碰国产精品超碰| 久久久久久久久久久电影| 亚洲综合图片区| 欧美绝品在线观看成人午夜影视| 亚洲欧美激情视频| 日本高清视频一区| 欧美精品尤物在线| 国产免费黄色av| 亚洲一区二区三区四区五区六区| 欧美成人精品一区二区免费看片 | 色呦呦呦在线观看| 96视频在线观看欧美| 日韩情爱电影在线观看| 日本欧美一区二区| 国产精品日韩成人| 欧美高清视频不卡网| 久久精品亚洲94久久精品| 国产在线精品一区免费香蕉 | 日本一区二区免费高清| 日本一区中文字幕| 中文字幕一区二区三区视频| 91精品在线一区二区| 久久99热精品| 国产精品传媒毛片三区| 日韩视频在线视频| 日本69式三人交| 亚洲综合图片网| 午夜国产在线视频| 青青草视频成人| 久久久久无码国产精品 | 亚洲区欧洲区| 丁香综合av| 国产精品美女久久久浪潮软件| av在线不卡电影| 色综合久久九月婷婷色综合| 在线午夜精品自拍| 国产精品国产精品国产专区蜜臀ah| 欧美三级在线观看视频| 亚洲精品国产精品国自| 亚洲AV无码精品自拍| 男人j桶女人的网站| 天天av导航| 99在线视频观看| 国产成人调教视频在线观看| 国产乱人伦偷精品视频免下载| 成人激情校园春色| 色婷婷综合久久| 久99九色视频在线观看| 亚洲欧美成人网| 色噜噜狠狠一区二区三区果冻| 在线视频中文亚洲| 六月婷婷久久| 挪威xxxx性hd极品| www.五月婷婷.com| www.黄在线| 一本大道色婷婷在线| 国产精品vip| 中文字幕一区二区三区av| 日韩av在线精品| 国产高清在线精品一区二区三区| 色婷婷狠狠18| 国产精品久久久免费观看| 夜夜狠狠擅视频| 一二三区高清| 视频一区日韩| 高清国产一区二区| 欧美精品在线视频| 成人性教育视频在线观看| 亚洲视频在线a| 毛片久久久久久| 亚洲精品成人a| 成人黄色在线电影| 午夜久久久久| 亚洲午夜激情网页| 97热在线精品视频在线观看| 国产在线欧美日韩| 天天色天天干天天色| 成人毛片在线播放| 大胆高清日本a视频| 日韩中文字幕一区二区高清99| 国产精品亚洲专一区二区三区| 欧美一级xxx| 国产精品免费一区二区三区在线观看| 九九热视频免费| 蜜桃视频在线观看www| 福利成人在线观看| 91精品啪在线观看国产18 | 欧美a一区二区| 国产一区二区三区av电影| 欧美日韩精品三区| av一区二区三区在线观看| 国产中文字幕一区二区| 热re66久久精品国产99热| 国产伦理精品| 紧缚奴在线一区二区三区| 精品国产髙清在线看国产毛片| 欧美精品一区在线发布| 丝袜 亚洲 另类 欧美 重口| av免费在线电影| 青春草视频在线观看| 亚洲激情亚洲| 欧美老女人在线| 久久久久国产精品视频| 欧美精品成人久久| 神马伦理电影| 91亚洲自偷观看高清| 欧美日韩亚洲国产一区| 99在线热播| 国产探花在线视频| 上原亚衣加勒比在线播放| 日韩美女毛片| 午夜不卡av免费| 亚洲成年人网站在线观看| 欧美一级久久久| 久久综合入口| 国产精品18p| 在线天堂视频| 国产综合婷婷| 日韩欧美不卡在线观看视频| 亚洲精品在线视频观看| 亚洲高清久久网| 在线视频中文字幕久| 欧美做受高潮电影o| 亚洲一区二区在线播放相泽| 国产亚洲欧洲黄色| 国产精品福利在线| 香蕉视频免费网站| 成人欧美视频在线观看播放| 嫩草香蕉在线91一二三区| 日韩视频在线一区二区三区| 91精品国产麻豆国产自产在线 | 午夜一区二区三区免费| 涩涩视频在线观看下载| 高清日韩欧美| 午夜视频在线观看一区二区| 国产欧美在线一区二区| 国产亚洲精品久久777777| 日本不卡视频一区二区| 先锋亚洲精品| 一区二区三区美女xx视频| 成年人视频在线免费| 中文字幕久热| 在线综合色站| 狠狠色噜噜狠狠狠狠97| 欧美日韩亚洲综合一区二区三区激情在线| 九九九国产视频| 中文字幕日本在线观看| 久久国产麻豆精品| 欧美一区二区国产| wwwjizzjizzcom| 午夜久久久久久噜噜噜噜| 中文字幕资源网在线观看免费 | 日韩精品免费在线视频观看| 欧美a v在线播放| 久久一区二区免费播放| 麻豆成人入口| 欧美中文字幕一区二区三区 | 精品久久国产字幕高潮| 欧美日韩亚洲一| 国产麻豆精品高清在线播放| 国产精品日韩精品中文字幕| 3d动漫精品啪啪1区2区免费| 17c丨国产丨精品视频| 影音先锋中文一区| 真实原创一区二区影院| 日韩限制级电影在线观看| 日本中文字幕片| 91网站免费| 日韩在线观看| 亚洲女人天堂色在线7777| 免费看的av网站| 最新av番号| 久久电影网站中文字幕| 欧美亚洲另类视频| 久草视频免费在线播放| 免费在线国产视频| 激情视频在线观看免费| 福利一区福利二区| 成人黄色激情网| 亚洲国产无线乱码在线观看| 中文字幕日本一区| 欧美日韩在线播放一区| 少妇高清精品毛片在线视频| 天海翼视频在线观看| 禁久久精品乱码| 欧美精品制服第一页| 妖精视频在线观看免费| 欧美日韩在线看片| 国产欧美精品一区aⅴ影院| 国语自产精品视频在线看一大j8| 欧美黄色激情视频| 成人影欧美片| 中文字幕制服丝袜成人av| 色就是色欧美| 国产毛片av| 国产亚洲在线观看| 日本亚洲欧美三级| 国产成人无码一区二区在线播放| 成人黄色免费短视频| 欧美日韩一区二区三区在线| 一本岛在线视频| 亚洲一区二区三区精品中文字幕 | 日本欧美肥老太交大片| 亚洲视频在线观看| 一级性生活免费视频| 国产盗摄——sm在线视频| 一本色道久久加勒比精品 | 国产精品一区二区三区四区五区 | aaa在线免费观看| 国产精品久久久久aaaa| 公共露出暴露狂另类av| 国产免费www| 亚洲午夜精品| 精品爽片免费看久久| 成人日韩在线视频| 一级片在线播放| 国产精品久久久久影视| 秋霞午夜一区二区| 97精品人妻一区二区三区在线| 欧美大奶一区二区| 色香阁99久久精品久久久| 久久久久久久蜜桃| 久久在线观看| 一区二区三区四区视频| 日韩经典在线观看| 91三级在线| 色哟哟精品一区| 蜜桃色一区二区三区| 国精产品一区一区三区mba下载| 色综合咪咪久久| 99久久久无码国产精品性波多| www视频在线免费观看| 91激情在线视频| 丝袜熟女一区二区三区 | 久久综合国产精品| 91黄色在线看| 亚洲日本伦理| 亚洲香蕉伊在人在线观| 久久久久久蜜桃一区二区| 午夜在线视频| 在线免费亚洲电影| 五月天综合视频| 亚洲高清影院| 欧美成人合集magnet| 中文在线字幕免费观| 夜间精品视频| 国产精品高潮呻吟久久| 日韩毛片在线免费看| 动漫一区在线| 日韩欧美成人午夜| 欧美成人精品一区二区免费看片 | 亚洲精品一区| 亚洲精品综合精品自拍| 探花视频在线观看| 亚洲字幕久久| 国产伦精品一区二区三区免| 变态黄色小视频网站| 国产精品水嫩水嫩| 人人爽人人爽av| 欧美办公室脚交xxxx| 亚洲精品影视在线观看| 国产性生活视频| 中文av一区| 久久99九九| 日本成年免费网站| 日韩欧美亚洲国产一区| 国产精品麻豆免费版现看视频| 欧美日韩一区二区三区在线电影| 日韩av电影在线播放| 国产原创在线| 欧美高清在线精品一区| 一本之道在线视频| 国产精品4hu.www| 久久人人爽人人爽人人片av高请 | 亚洲永久精品在线观看| 一区二区蜜桃| 欧美专区一二三| 三级在线播放| 日韩一区二区精品| 国产伦精品一区二区三区视频我 | 亚洲午夜精品久久久久久久久久久久| 色婷婷久久综合中文久久蜜桃av| 性一交一乱一区二区洋洋av| 在线电影看在线一区二区三区| 国产免费永久在线观看| 精品国产91亚洲一区二区三区婷婷 | 2018中文字幕第一页| 青青青国内视频在线观看软件| 亚洲免费伊人电影在线观看av| 国产绿帽刺激高潮对白| 精品一区二区三区在线视频| 69堂免费视频| 国产一级二级在线| 欧美亚洲自拍偷拍| 天天干天天色综合| 麻豆成人av在线|