女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Cortex-M MCU應用程序移植到RV32 MCU中的問題解析

麥克泰技術 ? 來源:嵌入式系統專家之聲 ? 2025-06-27 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下文章來源于嵌入式系統專家之聲,作者林金龍

1 引言

開源架構處理器RISC-V,在嵌入式系統中得到了越來越多的應用,近年多家處理器廠商發布了RV32架構MCU。2019年4月,SiFive發布了Freedom E310;2020年2月,兆易創新發布RV32 MCU GD32VF103;沁恒微電子發布CH32V、CH32X、CH32L系列RV32MCU;先輯半導體發布HPM5XXX和HPM6XXX系列RV32單核和多核MCU;瑞薩電子發布RV32汽車MCU RH850/U2B和通用MCU R9A02G021等。

隨著RISC-V MCU的快速發展,其軟件生態正逐步完善和豐富。Embedded Studio 、IAR 等主流商業IDE以及開源IDE eclipse等嵌入式軟件開發環境支持RISC-V MCU。一些主流操作系統已經支持RISC-V架構。QEMU RISC-V虛擬化平臺支持多種RISC-V處理器仿真FreeRTOS發布支持RISC-V MCU版本;鄒陽等基于QEMU RISC-V實現OpenHarmony移植和優化;Nicholas Gordon等將Kitten Lightweight Kernel操作系統移植到RISC-V;Luming Zhang移植并優化RISC-V UFEI Boot;Robert Balas等分析RV32IMC結構特點并提出程序方法。

第二屆滴水湖中國RISC-V產業論壇現場調查結果表明,RISC-V架構處理器已經成功應用于無線連接芯片、工業控制芯片,網絡通信芯片和邊緣計算芯片等場景。目前,在移動通信物聯網和工業控制等嵌入式應用領域,ARM架構處理器占市場主導地位。在一些領域和應用場景,RISC-V將對ARM的市場地位構成挑戰。RV32 MCU正爭奪ARM Cortex-M MCU的市場份額。將Cortex-M MCU應用程序移植到RV32 MCU,充分利用Cortex-M MCU的成熟生態,將有利于RISC-V的發展和推廣。由于RV32和Cortex-M的結構和編程模式存在差異,盡管使用程序開發工具能夠將源程序的編譯、匯編和鏈接生成RV32執行程序,但在程序移植過程中仍然會遇到一些問題。

本文根據RV32與Cortex-M在結構、編程模型和過程調用規范等方面的不同點,分析應用程序從RV32移植到Cortex-M過程中遇到的問題,提出解決方法和建議,并進行相關性能分析和比較。

本文第一節簡介RISC-V發展狀況,討論RV32的應用前景;第二節比較RV32與Cortex-M異常處理器機制,說明移植中斷處理程序面臨的問題;第三節對比RV32與Cortex-M指令架構,分析RV32指令模塊組合對程序性能的影響;第四節討論RISC-V與ARM處理器程序過程調用規范的差別,分析其對程序移植影響;第五節對論文工作進行總結。

2 中斷處理

在ARM架構處理器手冊和RISC-V架構處理器使用手冊中,用編程模式(Programmer's model)表示處理器架構中涉及程序開發的內容。編程模式通常包括處理器支持的數據類型,通用和特殊功能寄存器、異常和中斷響應機制和指令集等,異常和中斷處理處理器基本功能。

通常將由外部信號引起的異常稱為中斷。中斷處理是MCU應用系統的關鍵功能之一。中斷處理功能包括兩個部分,中斷響應機制和中斷服務程序(Interrupt Service Routine)。中斷響應機制由處理器硬件結構決定,中斷服務程序則與中斷響應機制相關。

2.1中斷響應機制

表1列出了Cortex-M和RV32中斷響應機制的差異。將應用程序從Cortex-M移植到RV32時,需要修改中斷處理功能相關程序。

表1 RV32和Cortex-M異常管理

62ddcd0c-50a8-11f0-b715-92fbcf53809c.png

Cortex-M僅支持向量中斷響應,中斷向量指向對應的中斷服務程序入口,處理器啟動后通過寄存器VTOR沖重定位中斷向量表。RV32支持向量和非向量兩種中斷響應方式,處理器器復位時缺省為非向量響應形式,中斷響應時指向程序空間的起始地址,通常為0x00。處理器啟動后,通過設置機器模式異常向量基址寄存器mtvec設置中斷響應模式和異常向量入口地址。

為了保證移植前后功能的一致性,將應用程序移植到RV32后仍保證向量中斷響應方式。RV32 MCU復位后首先執行初始化序,將中斷向量表地址值的高30位寫入RV32寄存器(CSR)mtvec的mtvec [31:2],將01寫入mtvec[1:0],選擇向量中斷響應模式。

目前市場上RV32 MCU外設類型、接口和控制方法與Cortex-MMCU相似,中斷向量表結構的結構相近。表2對比了Cortex-M MCU STM32F429與RV32 MCU GD32VF103中斷向量表結構。

表2 STM32F429與GD32VF103中斷向量表結構

62fcff6a-50a8-11f0-b715-92fbcf53809c.png

如表2所示,RV32 MCU中斷向量中,除向量0外,每個32位向量值是對應中斷服務程序的入口地址。由于復位后RV32缺省為非向量中斷響應模式,需要首先設置中斷響應模式和向量表基地址,向量0是跳轉指令,跳轉到復位啟動程序入口。

2.2上下文處理

Cortex-MMCU響應中斷請求時,硬件自動依次將xPSR,PC,LR,R12以及R3-R0壓入棧中,保存上下文;中斷服務程序返回時,硬件自動從棧中將數據彈回對應寄存器,恢復上下文。

RV32 MCU響應中斷請求時硬件自動保存PC到控制和狀態寄存器mepc,并保存特權模式至mstatus.MPP,但不保存上下文相關的通用寄存器和其他特殊功能寄存器。從中斷服務程序返回時,硬件僅自動恢復寄存器mstatus和PC。將Cortex-M MCU中斷服務程序移植到RV32 MCU時,需要在中斷服務程序中添加保存和恢復上下文語句或函數。

Cortex-M MCU應用程序和中斷服務程序遵守ARM過程調用規范AAPCS,硬件在中斷響應過程中自動保存4個特殊功能寄存器和4個參數寄存器r0-r3或稱為a0-a3。RISC-V應用程序過程調用規范約定8個參數寄存器x10-x17或稱為a0-a7。與Cortex-M MCU自動保存的上下文內容對照,RV32 MCU中斷服務程序中需要保存和恢復上下文內容最小包括參數寄存器a0-a7和特殊功能寄存器。表3列出了RV32 MCU中斷服務程序中保存和恢復上下文最小集的程序語句。

表3 RV32 MCU中斷服務程序保存和恢復上下文程序語句

6309c880-50a8-11f0-b715-92fbcf53809c.png

在中斷服務程序的入口添加表3中保存現場語句或函數,在返回語句前添加恢復現場語句或函數。 對于定制中斷響應機制Gd32VF103 等MCU,則需要依據其使用手冊編寫中斷處理相關的程序。

3 指令集模塊

Cortex-M MCU采用Thumb指令集。RV32 MCU采用模塊化指令,生成應用程序時可以選擇指令集模塊及其組合。將Cortex-M MCU應用程序移植到RV32 MCU時,選擇與Thumb指令集相應功能指令集模塊組合,以保持移植前后程序功能和性能的一致性。

為了便于分析和評估性能,本文選擇STM32F429和FE310分別作為Cortex-M MCU和RV32 MCU樣本,使用CoresMark 做性能分析;程序生成工具選擇Segger公司Embeddedstudio;匯編和編譯器選擇gcc,版本為gnu4.2.1。

STM32F429內核為Cortex-M4 ,指令集為Thumb2。FE310支持RV32imac指令集模塊,處理器指令集功能是所有子模塊功能的并集。表4對STM32F429與FE310指令集部分功能進行了比較。

表4 STM32F429與FE310指令集部分功能

631fc612-50a8-11f0-b715-92fbcf53809c.png

生成RV32 MCU應用程序時,選擇不同的指令集或指令集組合,將會影響程序的性能。

3.1RV32i vs RV32im

Embedded studio創建FE310應用程序工程時缺省使用RV32i指令集模塊,該模塊沒有乘法和除法指令。程序中的乘除法運算能夠正常編譯,編譯器通過調用由RV32i指令實現的運算函數庫實現。如果在編譯時選擇RV32im指令集模塊組合,則編譯器將直接使用乘法和除法指令實現運算,提高程序執行速度。表5列出了c程序采用RV32i和RV32im指令集編譯后生成匯編指令對照。

表5 RV32i與RV32im匯編指令

633e5154-50a8-11f0-b715-92fbcf53809c.png

表6列出了選擇RV32i與RV32im指令集在FE310模擬器上運行CoreMark得分。結果表明,如果應用程序中含有乘法和除法運算,將RV32i改為RV32im指令集將提高程序運行速度。

表6 RV32i與RV32im CoreMark得分

6354e054-50a8-11f0-b715-92fbcf53809c.png

3.2RV32im vs RV32imc

由于MCU處理器中存儲資源受限,對ROM和RAM的需求是開發MCU應用程序關注的重點之一。Cortex-M采用支持16位指令Thumb指令模式,以減少應用程序的體積。RV32i和RV32im指令長度是32位。對于同一源程序,使用RV32im指令集生成的二進制目標程序的長度將會大于Cortex-M目標程序的長度,從而增加對存儲資源的需求。選擇RV32imc指令集組合,將指令長度從32位變為16位,減少所生成二進制目標程序的長度。表7列出了Coremark 4個主要文件不同指令集生成的二進制代碼長度。

表7 CoreMark主要文件生成的二進制代碼長度(字節)

6368f51c-50a8-11f0-b715-92fbcf53809c.png

從表7可見,RV32i程序的平均長度是Cortex-M4的2.05倍,RV32imc程序的平均長度是Cortex-M4的1.2倍。可見,在將程序從Cortex-M移植到RV32時,選擇RV32imc指令集組合,將基本滿足原系統對存儲資源限制要求。

添加指令集模塊"A",選擇RV32imac指令集組合,編譯后主要文件二進制代碼長度與RV32imac完全相同,CoreMark得分2.34/MHz,與選擇RV32imc指令集組合時相近。

4過程調用規范

過程調用規范(Procedure Call Standard)定義了應用程序二進制接口(Application Binary Interface),通常包括函數或過程調用中參數傳遞和結果返回方式,處理器寄存器使用,以及數據類型處理等內容。將Cortex-M MCU應用程序移植到RV32 MCU時,需要考慮ARM處理器和RISC-V處理器過程調用規范之間的差異。本節將討論函數調用過程參數傳遞方式的差別對移植程序帶來的影響。

ARM架構過程調用規范(AAPCS)約定:在函數和過程調用過程中,調用者(主程序)通過4個寄存器r0-r3或稱為a0-a3,向函數(被調用者)傳遞參數。如果參數超過4個寄存器數值范圍,超出部分利用棧傳遞;函數通過a0-al返回結果。RISV-V過程調用規范(RISC-V Procedure Calling Convetion)約定:調用者通過8個寄存器x10-x17或稱為a0-a7,向被調用者傳遞參數。如果參數超過8個寄存器數值范圍,超出部分利用棧傳遞;被調用者利用a0-al返回結果。表8列出了6個整數型參數C語言函數編譯后所生成的Cortex-M和RV32imac匯編函數。

表8由C函數生成匯編函數

638057e8-50a8-11f0-b715-92fbcf53809c.png

如表8匯編函數所示,Cortex-M4函數,參數1到參數4通過a0-a3傳遞,參數5和6通過棧傳遞。在RV32imac函數中,參數1-6通過a0-a5傳遞。Cortex-M4和RV32imac利用a0返回結果。

由于訪問棧的延時高于訪問寄存器,在設計Cortex-MMCU應用函數時通常使參數不超過4*32位。將Cortex-M MCU應用程序移植到RV32 MCU時,利用多達8*32位寄存器參數傳遞特性,將減少函數和過程調用帶來的延時。

5 總結與展望

本文從MCU中斷處理機制,指令集模塊組合,以及程序過程調用規范三方面比較Cortex-M和RV32MCU的差別,分析了這些差別對將應用程序從Cortex-M MCU移植到RV32 MCU的影響。為了兼容中斷處理程序,將RV32 MCU設置為向量中斷響應方式,并在中斷服務程序中添加保存和恢復上文語句。在生成應用程序時選擇RV32imc指令集組合,實現高性能和小體積的應用程序。利用MCU寄存器在函數和過程調用過程傳遞更多參數,降低調用過程中的延時。

RV32 MCU與Cortex-M MCU指令差別很大,指令之間的差異對程序移植性能優化帶來挑戰。未來將進一步探討RV32程序移植中的性能優化問題。

(作者單位:北京大學軟件與微電子學院,北京)

本文由《嵌入式技術與智能系統》授權發表,原文刊登在2024年第1期。《嵌入式技術與智能系統》雜志由漢斯中文開源期刊學術交流平臺出版,是一本關注傳統嵌入式技術與新興智能系統前沿技術最新進展的國際中文期刊,編委團隊匯聚了國內知名嵌入式系統專家與學者。閱讀原文了解期刊詳情并可下載論文PDF版本。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19851

    瀏覽量

    234116
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17915

    瀏覽量

    362526
  • 移植
    +關注

    關注

    1

    文章

    396

    瀏覽量

    28631
  • Cortex-M
    +關注

    關注

    2

    文章

    231

    瀏覽量

    30294
  • RISC-V
    +關注

    關注

    46

    文章

    2525

    瀏覽量

    48492

原文標題:移植Cortex-M程序到RV32中的問題 I 峰會和演講預告

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    OM13077,用于Cortex-M MCU的LPCXpresso54102開發板

    OM13077,用于Cortex-M MCU的LPCXpresso54102開發板。帶有LPC54102低功耗微控制器的LPCXpresso 54102電路板旨在讓您盡可能輕松地開始您的項目
    發表于 11-08 08:56

    怎樣去測量并顯示基于Cortex-MMCU代碼

    編寫的,而且開發人員常常被迫對代碼進行手工優化,可能會回到匯編語言,以滿足性能的需求。測量代碼部分的實際執行時間可以幫助找到代碼的熱點。本文將說明如何可以方便地測量和顯示在基于Cortex-M MCU的...
    發表于 11-03 07:28

    怎樣使用C++來編寫Cortex-M系列MCU程序

    C++是什么?C++的特點有哪些呢?怎樣使用C++來編寫Cortex-M系列MCU程序呢?
    發表于 12-23 06:31

    Cortex-M系列MCU錯誤追蹤庫有何作用

    @2019-02-14【小記】  CmBacktrace: ARM Cortex-M 系列 MCU 錯誤追蹤庫,用來將單片機故障狀態寄存器值翻譯出來輸出至終端上以便排錯CmBacktrace: ARM Cortex-M 系列
    發表于 01-25 06:39

    如何將TensorFlow Lite應用程序移植Arm Cortex-M55系統上

    。這使得將ML應用程序移植Cortex-M55變得容易得多,因為開發人員可以使用他們已經熟悉的相同的庫和神經網絡框架。 在本文中,我們將詳細說明將TensorFlow Lite的微控
    發表于 03-31 10:40

    干貨:對比看看Arm推出的10款Cortex-M系列MCU內核IP

    ,Arm的Cortex-M系列MCU內核都是主流。截止目前,Arm共推出了10款Cortex-M系列MCU內核IP,這些IP可滿足低、
    發表于 07-29 11:35

    傳統的單片機和ARM較量 助推MCU踏上高端Cortex-M市場

    據有關市場調研機構稱,基于ARM Cortex-M內核的MCU在2010年創紀錄地實現了100%的出貨量增長。而整個MCU市場才增長了37%。MCU市場的增長也幾乎是來自于ARM
    發表于 04-28 10:00 ?1773次閱讀

    加速Cortex-M MCU調試的五個技巧資料下載

    電子發燒友網為你提供加速Cortex-M MCU調試的五個技巧資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助廣大的電子工程師們。
    發表于 04-24 08:45 ?5次下載
    加速<b class='flag-5'>Cortex-M</b> <b class='flag-5'>MCU</b>調試的五個技巧資料下載

    基于ARM Cortex-M MCU的MPU所提供的一些特性

    代碼訪問其指定區域以外的內存或外設,而且還可以用于檢測堆棧溢出。 我們基于ARM Cortex-M MCU的MPU,討論一下MPU所提供的一些特性。 MPU是什么? 內存保護單元(MPU)是一種硬件機制,只允許需要訪問某些資源
    的頭像 發表于 07-19 09:47 ?7774次閱讀

    mcookie與單片機的關系_使用ARM Cortex-M MCU拓展單片機教學

    mcookie與單片機的關系_使用ARM Cortex-M MCU拓展單片機教學
    發表于 11-30 19:36 ?9次下載
    mcookie與單片機的關系_使用ARM <b class='flag-5'>Cortex-M</b> <b class='flag-5'>MCU</b>拓展單片機教學

    一點理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯誤追蹤庫

    一點理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯誤追蹤庫
    發表于 11-30 19:51 ?10次下載
    一點理解之 CmBacktrace: ARM <b class='flag-5'>Cortex-M</b> 系列 <b class='flag-5'>MCU</b> 錯誤追蹤庫

    no cortex-m sw device found 問題解決【轉】

    no cortex-m sw device found 問題解決【轉】
    發表于 12-02 17:36 ?33次下載
    no <b class='flag-5'>cortex-m</b> sw device found 問<b class='flag-5'>題解</b>決【轉】

    基于32位Arm Cortex-M內核N32系列MCU應用

    國民技術N32系列MCU產品基于32位Arm Cortex-M內核,內置嵌入式高速閃存、低功耗電源管理,集成數模混合電路,并內置硬件密碼算法加速引擎以及安全單元。
    發表于 03-28 11:35 ?1308次閱讀

    瑞薩Cortex-M內核RA MCU的RT-Thread BSP制作教程發布

    瑞薩Cortex-M內核RA MCU的RT-Thread BSP制作教程發布
    的頭像 發表于 09-18 10:58 ?982次閱讀
    瑞薩<b class='flag-5'>Cortex-M</b>內核RA <b class='flag-5'>MCU</b>的RT-Thread BSP制作教程發布

    從8位AVR32位SAM D21 MCU應用程序移植

    電子發燒友網站提供《從8位AVR32位SAM D21 MCU應用程序移植.pdf》資料免費下載
    發表于 09-20 11:41 ?1次下載
    從8位AVR<b class='flag-5'>到</b>32位SAM D21 <b class='flag-5'>MCU</b>的<b class='flag-5'>應用程序</b><b class='flag-5'>移植</b>