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

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

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

RISC-V MCU gp全局指針說明

CHANBAEK ? 來源:CSDN-借過風(fēng)景 ? 作者:CSDN-借過風(fēng)景 ? 2023-02-15 11:55 ? 次閱讀

gp ,g lobal pointer,全局指針寄存器,RISC-V 32個(gè)寄存器之一,為了優(yōu)化±2KB內(nèi)全局變量的訪問。

gp寄存器在啟動代碼中加載為__global_pointer$的地址,并且之后不能被改變。

linker時(shí)使用 __global_pointer$ 來比較全局變量的地址,如果在范圍內(nèi),就替換掉lui或puipc指令的 absolute/pc-relative尋址, 變?yōu)間p-relative尋址,使得代碼效率更高。 該過程被稱為 linker relaxation (鏈接器松弛),也可以使用-Wl,--no-relax來關(guān)閉此功能。

如:需要讀取全局變量 tao_global的值,地址位 0x20000100 ,gp指針地址為 0x20000800 ;

  • 普通調(diào)用方式為:
    lui a5,0x20000 /* 將0x20000100200x20000 左移12位賦給a5寄存器 */
    lw a5,256(a5) /* 加載a5+2560x1000x2000010012位)的值至a5寄存器 */
    
  • gp指針優(yōu)化調(diào)用方式:
    lw a5,-1792(gp) /* 加載gp-1792地址處的值至a5,即0x20000100處的值*/
    

通過gp指針,訪問其值±2KB,即4KB范圍內(nèi)的全局變量,可以節(jié)約一條指令。

4KB區(qū)域可以位于尋址內(nèi)存中任意位置,但是為了使優(yōu)化更有效率,最好覆蓋最頻繁使用的RAM區(qū)域。 對于標(biāo)準(zhǔn)的newlib應(yīng)用程序,這是分配.sdata部分的區(qū)域,因?yàn)樗酥T如_impure_ptr、malloc_sbrk_base等變量。 因此,定義應(yīng)該被放在.sdata部分之前。 以RISC-V MCU CH32V103 ld文件為例:

.data :
    {
        *(.gnu.linkonce.r.*)
        *(.data .data.*)
        *(.gnu.linkonce.d.*)
        . = ALIGN(8);
        PROVIDE( __global_pointer$ = . + 0x800 ); /* __global_pointer地址*/
        *(.sdata .sdata.*)
        *(.sdata2.*)
        *(.gnu.linkonce.s.*)
        . = ALIGN(8);
        *(.srodata.cst16)
        *(.srodata.cst8)
        *(.srodata.cst4)
        *(.srodata.cst2)
        *(.srodata .srodata.*)
        . = ALIGN(4);
        PROVIDE( _edata = .);
    } >RAM AT>FLASH

gp指針優(yōu)化代碼空間---

通常情況下,gp指針定義在data區(qū),有時(shí)候?yàn)榱藘?yōu)化代碼密度,可以根據(jù)實(shí)際情況修改gp指針的位置,如工程中定義了大量的初始化為0或未初始化的全局?jǐn)?shù)組作為緩沖區(qū),可以將gp指針的位置定義到bss段。

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

    關(guān)注

    146

    文章

    16665

    瀏覽量

    347740
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119193
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    475

    瀏覽量

    70457
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    607

    瀏覽量

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

    關(guān)注

    44

    文章

    2141

    瀏覽量

    45705
收藏 人收藏

    評論

    相關(guān)推薦

    擁抱RISC-V的開發(fā)世界 兆易創(chuàng)新推GD32VF103系列RISC-V MCU

    兆易創(chuàng)新推出GD32V系列RISC-V內(nèi)核32位通用MCU新品,現(xiàn)在,直接使用GD32V系列32位通用MCU以創(chuàng)意靈感擁抱
    發(fā)表于 08-23 10:05 ?7892次閱讀

    國產(chǎn)RISC-V MCU推薦

    高速PHY收發(fā)器(480Mbps)、千兆以太網(wǎng)MAC及10兆物理層收發(fā)器等。 沁恒的另一顆芯片 xiaolinen認(rèn)為在選擇國產(chǎn)RISC-V MCU時(shí),需要重點(diǎn)考慮生態(tài)問題,碰到問題是否能快速的找到
    發(fā)表于 04-17 11:00

    RISC-VMCU與ARM對比

    RISC-VMCU與ARM在多個(gè)方面存在顯著的區(qū)別,以下是兩者的對比: 開源與專有 RISC-VRISC-V是一種開源的指令集架構(gòu)(ISA),允許任何人免費(fèi)使用、修改和貢獻(xiàn)
    發(fā)表于 05-27 15:58

    RISC-VMCU關(guān)于USB高速通信設(shè)計(jì)的難點(diǎn)

    RISC-VMCU關(guān)于USB高速通信設(shè)計(jì)的難點(diǎn)主要集中在硬件集成、性能優(yōu)化、軟件生態(tài)和成本效益等方面。以下是針對這些難點(diǎn)的詳細(xì)分析和歸納: 硬件集成與外設(shè)支持 : 高速USB PHY集成 :傳統(tǒng)
    發(fā)表于 05-27 16:23

    risc-vmcu對RTOS兼容性如何

    RISC-VMCU對RTOS(實(shí)時(shí)操作系統(tǒng))的兼容性主要取決于多個(gè)因素,包括RTOS的版本、RISC-V指令集的實(shí)現(xiàn)、以及芯片制造商提供的支持。以下是關(guān)于RISC-V
    發(fā)表于 05-27 16:26

    RISC-V MCU開發(fā) (一):集成開發(fā)環(huán)境

    、鏈接腳本文件編輯、全局配置、工程配置、命令行工具、重新編譯等功能入口。 【內(nèi)置芯片工程】MRS內(nèi)置WCH、GD等廠家RISC-V、ARM等系列MCU的芯片工程模板,同時(shí)支持Harmony
    發(fā)表于 09-22 14:44

    RISC-V MCU開發(fā)相關(guān)資料分享

    RISC-V MCU開發(fā)(一):集成開發(fā)環(huán)境近年來,RISC-V生態(tài)獲得了空前的繁榮發(fā)展,國內(nèi)外眾多科技公司紛紛下場布局、行業(yè)應(yīng)用層出不窮,搭載RISC-V內(nèi)核的
    發(fā)表于 11-10 07:50

    RISC-V MCU開發(fā)相關(guān)資料分享

    RISC-V MCU開發(fā) (二):工程創(chuàng)建與管理MounRiver? Studio(MRS)內(nèi)置了GD、WCH等芯片廠家的RISC-V/ARM以及RISC-V通用指令集系列的芯片工程模
    發(fā)表于 12-09 08:14

    RISC-V的相關(guān)資料分享

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是國內(nèi)RISC-V內(nèi)核MCU廠商(2021)?! ‰m然RISC-V風(fēng)潮已經(jīng)吹了好幾年,但2019年才是其真正進(jìn)入主流市場的元年,最近
    發(fā)表于 02-11 06:23

    RISC-V MCU開發(fā)的相關(guān)資料分享

    RISC-V MCU開發(fā) (十一):跨內(nèi)核工程轉(zhuǎn)換大多數(shù)嵌入式工程師使用Keil進(jìn)行開發(fā),但Keil目前不支持RISC-V內(nèi)核,只支持ARM內(nèi)核。MounRiver? Studio(MRS)同時(shí)支持
    發(fā)表于 02-11 06:17

    RISC-V MCU開發(fā)實(shí)戰(zhàn)(一) :DHT11

    全局配置、工程配置、命令行工具、重新編譯等功能入口?!緝?nèi)置芯片工程】MRS內(nèi)置WCH、GD等廠家RISC-V、ARM等系列MCU的芯片工程模板,同時(shí)支持Harmony LiteOS-M
    發(fā)表于 03-06 15:17

    RISC-V gp全局指針寄存器說明

    ,RISC-V 32個(gè)寄存器之一,為了優(yōu)化±2KB內(nèi)全局變量的訪問。 gp寄存器在啟動代碼中加載為__global_pointer$的地址,并且之后不能被改變。 linker時(shí)使用__global_pointer
    發(fā)表于 09-11 16:57

    RISC-V MCU開發(fā)(一):集成開發(fā)環(huán)境

    RISC-V MCU開發(fā)(一):集成開發(fā)環(huán)境近年來,RISC-V生態(tài)獲得了空前的繁榮發(fā)展,國內(nèi)外眾多科技公司紛紛下場布局、行業(yè)應(yīng)用層出不窮,搭載RISC-V內(nèi)核的
    發(fā)表于 11-05 16:35 ?37次下載
    <b class='flag-5'>RISC-V</b> <b class='flag-5'>MCU</b>開發(fā)(一):集成開發(fā)環(huán)境

    教你玩轉(zhuǎn)32位RISC-V內(nèi)核CH32V系列MCU(附樣例)

    已逐漸成型。在全球“缺芯潮”影響下,國產(chǎn)MCU研發(fā)及應(yīng)用的趨勢大有可為。作為知名國產(chǎn)MCU企業(yè)沁恒微電子,其接口優(yōu)勢的RISC-V內(nèi)核的CH32V系列
    的頭像 發(fā)表于 08-15 10:06 ?1930次閱讀
    教你玩轉(zhuǎn)32位<b class='flag-5'>RISC-V</b>內(nèi)核CH32<b class='flag-5'>V</b>系列<b class='flag-5'>MCU</b>(附樣例)

    推出采用GD32 RISC-VMCU

    推出采用GD32 RISC-VMCU ppt分享
    發(fā)表于 07-14 17:15 ?0次下載