一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內(nèi)不再提示

Cortex-M MCU應(yīng)用程序移植到RV32 MCU中的問題解析

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

掃碼添加小助手

加入工程師交流群

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

1 引言

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

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

第二屆滴水湖中國RISC-V產(chǎn)業(yè)論壇現(xiàn)場調(diào)查結(jié)果表明,RISC-V架構(gòu)處理器已經(jīng)成功應(yīng)用于無線連接芯片、工業(yè)控制芯片,網(wǎng)絡(luò)通信芯片和邊緣計算芯片等場景。目前,在移動通信、物聯(lián)網(wǎng)和工業(yè)控制等嵌入式應(yīng)用領(lǐng)域,ARM架構(gòu)處理器占市場主導(dǎo)地位。在一些領(lǐng)域和應(yīng)用場景,RISC-V將對ARM的市場地位構(gòu)成挑戰(zhàn)。RV32 MCU正爭奪ARM Cortex-M MCU的市場份額。將Cortex-M MCU應(yīng)用程序移植到RV32 MCU,充分利用Cortex-M MCU的成熟生態(tài),將有利于RISC-V的發(fā)展和推廣。由于RV32和Cortex-M的結(jié)構(gòu)和編程模式存在差異,盡管使用程序開發(fā)工具能夠?qū)⒃闯绦虻木幾g、匯編和鏈接生成RV32執(zhí)行程序,但在程序移植過程中仍然會遇到一些問題。

本文根據(jù)RV32與Cortex-M在結(jié)構(gòu)、編程模型和過程調(diào)用規(guī)范等方面的不同點,分析應(yīng)用程序從RV32移植到Cortex-M過程中遇到的問題,提出解決方法和建議,并進行相關(guān)性能分析和比較。

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

2 中斷處理

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

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

2.1中斷響應(yīng)機制

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

表1 RV32和Cortex-M異常管理

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

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

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

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

表2 STM32F429與GD32VF103中斷向量表結(jié)構(gòu)

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

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

2.2上下文處理

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

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

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

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

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

在中斷服務(wù)程序的入口添加表3中保存現(xiàn)場語句或函數(shù),在返回語句前添加恢復(fù)現(xiàn)場語句或函數(shù)。 對于定制中斷響應(yīng)機制Gd32VF103 等MCU,則需要依據(jù)其使用手冊編寫中斷處理相關(guān)的程序。

3 指令集模塊

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

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

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

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

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

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

3.1RV32i vs RV32im

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

表5 RV32i與RV32im匯編指令

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

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

表6 RV32i與RV32im CoreMark得分

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

3.2RV32im vs RV32imc

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

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

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

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

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

4過程調(diào)用規(guī)范

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

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

表8由C函數(shù)生成匯編函數(shù)

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

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

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

5 總結(jié)與展望

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

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

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

本文由《嵌入式技術(shù)與智能系統(tǒng)》授權(quán)發(fā)表,原文刊登在2024年第1期?!肚度胧郊夹g(shù)與智能系統(tǒng)》雜志由漢斯中文開源期刊學術(shù)交流平臺出版,是一本關(guān)注傳統(tǒng)嵌入式技術(shù)與新興智能系統(tǒng)前沿技術(shù)最新進展的國際中文期刊,編委團隊匯聚了國內(nèi)知名嵌入式系統(tǒng)專家與學者。閱讀原文了解期刊詳情并可下載論文PDF版本。

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

    關(guān)注

    68

    文章

    19851

    瀏覽量

    234119
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17915

    瀏覽量

    362553
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    396

    瀏覽量

    28631
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    231

    瀏覽量

    30295
  • RISC-V
    +關(guān)注

    關(guān)注

    46

    文章

    2525

    瀏覽量

    48493

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

文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    OM13077,用于Cortex-M MCU的LPCXpresso54102開發(fā)板

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

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

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

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

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

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

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

    如何將TensorFlow Lite應(yīng)用程序移植Arm Cortex-M55系統(tǒng)上

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

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

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

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

    據(jù)有關(guān)市場調(diào)研機構(gòu)稱,基于ARM Cortex-M內(nèi)核的MCU在2010年創(chuàng)紀錄地實現(xiàn)了100%的出貨量增長。而整個MCU市場才增長了37%。MCU市場的增長也幾乎是來自于ARM
    發(fā)表于 04-28 10:00 ?1773次閱讀

    加速Cortex-M MCU調(diào)試的五個技巧資料下載

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

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

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

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

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

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

    一點理解之 CmBacktrace: ARM Cortex-M 系列 MCU 錯誤追蹤庫
    發(fā)表于 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 問題解決【轉(zhuǎn)】

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

    基于32位Arm Cortex-M內(nèi)核N32系列MCU應(yīng)用

    國民技術(shù)N32系列MCU產(chǎn)品基于32位Arm Cortex-M內(nèi)核,內(nèi)置嵌入式高速閃存、低功耗電源管理,集成數(shù)?;旌想娐?,并內(nèi)置硬件密碼算法加速引擎以及安全單元。
    發(fā)表于 03-28 11:35 ?1308次閱讀

    瑞薩Cortex-M內(nèi)核RA MCU的RT-Thread BSP制作教程發(fā)布

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

    從8位AVR32位SAM D21 MCU應(yīng)用程序移植

    電子發(fā)燒友網(wǎng)站提供《從8位AVR32位SAM D21 MCU應(yīng)用程序移植.pdf》資料免費下載
    發(fā)表于 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'>應(yīng)用程序</b><b class='flag-5'>移植</b>