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

    文章

    17123

    浏览量

    350972
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120224
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70551
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28360
  • RISC-V
    +关注

    关注

    45

    文章

    2270

    浏览量

    46124
收藏 人收藏

    评论

    相关推荐

    拥抱RISC-V的开发世界 兆易创新推GD32VF103系列RISC-V MCU

    兆易创新推出GD32V系列RISC-V内核32位通用MCU新品,现在,直接使用GD32V系列32位通用MCU以创意灵感拥抱
    发表于 08-23 10:05 7961次阅读

    国产RISC-V MCU推荐

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

    RISC-VMCU与ARM对比

    RISC-VMCU与ARM在多个方面存在显著的区别,以下是两者的对比: 开源与专有 RISC-VRISC-V是一种开源的指令集架构(ISA),允许任何人免费使用、修改和贡献
    发表于 05-27 15:58

    RISC-VMCU关于USB高速通信设计的难点

    RISC-VMCU关于USB高速通信设计的难点主要集中在硬件集成、性能优化、软件生态和成本效益等方面。以下是针对这些难点的详细分析和归纳: 硬件集成与外设支持 : 高速USB PHY集成 :传统
    发表于 05-27 16:23

    risc-vmcu对RTOS兼容性如何

    RISC-VMCU对RTOS(实时操作系统)的兼容性主要取决于多个因素,包括RTOS的版本、RISC-V指令集的实现、以及芯片制造商提供的支持。以下是关于RISC-V
    发表于 05-27 16:26

    RISC-V MCU入门

    RISC-V MCU入门哪个厂家的资料比较全?
    发表于 11-27 16:51

    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 gp全局指针寄存器说明

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

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

    RISC-V MCU开发(一):集成开发环境近年来,RISC-V生态获得了空前的繁荣发展,国内外众多科技公司纷纷下场布局、行业应用层出不穷,搭载RISC-V内核的
    发表于 11-05 16:35 37次下载
    <b class='flag-5'>RISC-V</b> <b class='flag-5'>MCU</b>开发(一):集成开发环境

    推出采用GD32 RISC-VMCU

    推出采用GD32 RISC-VMCU ppt分享
    发表于 07-14 17:15 0次下载