0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RISC-V MCU gp全局指针说明

CHANBAEK 来源:CSDN-借过风景 作者:CSDN-借过风景 2023-02-15 11:55 次阅读

gp ,g lobal pointer,全局指针寄存器RISC-V 32个寄存器之一,为了优化±2KB内全局变量的访问。

gp寄存器在启动代码中加载为__global_pointer$的地址,并且之后不能被改变。

linker时使用 __global_pointer$ 来比较全局变量的地址,如果在范围内,就替换掉lui或puipc指令的 absolute/pc-relative寻址, 变为gp-relative寻址,使得代码效率更高。 该过程被称为 linker relaxation (链接器松弛),也可以使用-Wl,--no-relax来关闭此功能。

如:需要读取全局变量 tao_global的值,地址位 0x20000100 ,gp指针地址为 0x20000800 ;

  • 普通调用方式为:
    lui a5,0x20000 /* 将0x20000100200x20000 左移12位赋给a5寄存器 */
    lw a5,256(a5) /* 加载a5+2560x1000x2000010012位)的值至a5寄存器 */
    
  • gp指针优化调用方式:
    lw a5,-1792(gp) /* 加载gp-1792地址处的值至a5,即0x20000100处的值*/
    

通过gp指针,访问其值±2KB,即4KB范围内的全局变量,可以节约一条指令。

4KB区域可以位于寻址内存中任意位置,但是为了使优化更有效率,最好覆盖最频繁使用的RAM区域。 对于标准的newlib应用程序,这是分配.sdata部分的区域,因为它包含了诸如_impure_ptr、malloc_sbrk_base等变量。 因此,定义应该被放在.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指针优化代码空间---

通常情况下,gp指针定义在data区,有时候为了优化代码密度,可以根据实际情况修改gp指针的位置,如工程中定义了大量的初始化为0或未初始化的全局数组作为缓冲区,可以将gp指针的位置定义到bss段。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343607
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70361
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112
  • RISC-V
    +关注

    关注

    41

    文章

    1901

    浏览量

    45045
收藏 人收藏

    评论

    相关推荐

    青稞RISC-V通用系列MCU一览

    产品概述 CH32V、CH32X系列MCU采用自研的青稞RISC-V内核,基于蓬勃发展的RISC-V开源指令集架构,针对低功耗和高速响应等应用优化扩展,免费配套IDE等开发工具软件,免
    发表于 10-11 09:56

    国产RISC-V MCU推荐

    高速PHY收发器(480Mbps)、千兆以太网MAC及10兆物理层收发器等。 沁恒的另一颗芯片 xiaolinen认为在选择国产RISC-V MCU时,需要重点考虑生态问题,碰到问题是否能快速的找到
    发表于 04-17 11:00

    RISC-V MCU开发 (一):集成开发环境

    、链接脚本文件编辑、全局配置、工程配置、命令行工具、重新编译等功能入口。 【内置芯片工程】MRS内置WCH、GD等厂家RISC-V、ARM等系列MCU的芯片工程模板,同时支持Harmony
    发表于 09-22 14:44

    RISC-V MCU开发相关资料分享

    RISC-V MCU开发(一):集成开发环境近年来,RISC-V生态获得了空前的繁荣发展,国内外众多科技公司纷纷下场布局、行业应用层出不穷,搭载RISC-V内核的
    发表于 11-10 07:50

    RISC-V MCU开发相关资料分享

    RISC-V MCU开发 (二):工程创建与管理MounRiver® Studio(MRS)内置了GD、WCH等芯片厂家的RISC-V/ARM以及RISC-V通用指令集系列的芯片工程模
    发表于 12-09 08:14

    RISC-V的相关资料分享

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是国内RISC-V内核MCU厂商(2021)。  虽然RISC-V风潮已经吹了好几年,但2019年才是其真正进入主流市场的元年,最近
    发表于 02-11 06:23

    RISC-V MCU开发的相关资料分享

    RISC-V MCU开发 (十一):跨内核工程转换大多数嵌入式工程师使用Keil进行开发,但Keil目前不支持RISC-V内核,只支持ARM内核。MounRiver® Studio(MRS)同时支持
    发表于 02-11 06:17

    RISC-V MCU开发实战(一) :DHT11

    全局配置、工程配置、命令行工具、重新编译等功能入口。【内置芯片工程】MRS内置WCH、GD等厂家RISC-V、ARM等系列MCU的芯片工程模板,同时支持Harmony LiteOS-M
    发表于 03-06 15:17

    目前国内RISC-V架构的MCU从程序从arm移植到RISC-V难度大吗?

    目前国内RISC-V架构的MCU从程序从arm移植到RISC-V难度大吗?
    发表于 03-09 10:00

    【转载】第1章 初识RISC-V

    位。如果支持浮点指令,则需额外支持32个浮点(Float Point)寄存器不同于ARM,RISC-V中PC指针不占用通过寄存器,而是独立的,程序执行中自动变化,无法通过通用寄存器访问和修改PC值
    发表于 03-28 16:57

    RISC-V架构

    平台、软件工具也在完善中,一定程度上阻碍了下游芯片的推广,相对来说在中低端应用市场有一定竞争力。  市场层面,RISC-V内核有望率先在32位以上的MCU市场取得突破,预计2025年全球市场空间超过40
    发表于 04-03 15:29

    国内RISC-V内核MCU厂商主要有哪些?

    RISC-V发展迅速,国内厂商也纷纷入局,目前国内RISC-V内核MCU厂商主要有哪些呢,前景如何?
    发表于 04-14 10:02

    RISC-V 发展

    通用寄存器,每个通用寄存器都有各自的用途。例如x2是作为sp栈指针、a0-a1用来保存函数参数或返回值。x0寄存器被硬编码为了0,就是个0值寄存器。ABI名称相当于这些通用寄存器的别名,在RISC-V
    发表于 04-14 10:18

    RISC-V gp全局指针寄存器说明

    RISC-V 32个寄存器之一,为了优化±2KB内全局变量的访问。 gp寄存器在启动代码中加载为__global_pointer$的地址,并且之后不能被改变。 linker时使用__global_pointer
    发表于 09-11 16:57

    RISC-V mcu何时进军AI

    今天看了篇文章,讲述MCU界“六大天王”ST、NXP、Microchip、Renesas、TI、Infineon都在加大布局边缘AI,这也应该是RISC-V MCU 的一次机遇啊!
    发表于 11-04 09:58