当前位置: 首页 > news >正文

Greenhills Lib操作-查看Lib信息与将lib中的data段link到指定区域

文章目录

    • 前言
    • Greenhillls中gsize的用法
    • 修改ld文件将lib中的data段指定区域
    • 示例定义与链接
    • 总结

前言

项目开发过程中,遇到客户开发ASW,提供Lib进行集成,但ASW中的标定量没有定义对应的data段,导致无法将标定量指定到特定的内存。本文介绍将Lib中的data段链接到指定区域的一种方法。以及当我们拿到Lib后,如何获取Lib中的有用信息。

Greenhillls中gsize的用法

gsize用来查看文件中的各个段的大小,输入的文件可以是.o文件,.a文件(lib)或可执行文件。

使用方法:

Usage: gsize [-table] [-all] [-nototals] file1 [file2 ...]@commandfile    read in additional options from <commandfile>-help           display this help message-all            show all sections. overrides -text -nobss etc-commons        display common symbols (ELF only)-count_commons  include commons in total size of .bss .sbss-[no]details    suppress/display section detail info-[no]totals     suppress/display section summary info-table          display output in table format-gcompare       display output in format suitable for gcompare-text           only show text sections. same as -nodata -nobss-notext         ignore text sections-nodata         ignore data sections-nobss          ignore bss  sections-zero           display zero-length sections

当我们拿到一个lib后,使用如下方式,可以完整读取到lib中的各个文件中的各个段的大小

gsize -all  libTest.a

打印信息示例如下:
在这里插入图片描述
最后输出的是整个lib中所占的各个段大小

前面会输出Lib中各个文件的各个段大小
在这里插入图片描述
另外,可以使用ax -t命令将lib中的.o解压出来

修改ld文件将lib中的data段指定区域

在GHS编译手册中有介绍,如何将.o或.a文件中的段链接到指定段,如下图所示
在这里插入图片描述
注意:对于.a和.o,不要使用完整路径,只用其名称即可

如果我们需要将lib中的所有文件的data段指定到特定段,可以按下面的定义:
在这里插入图片描述
使用*通配符,即可表示为lib中的所有文件

示例定义与链接

示例中,ASW已有一部分标定量定义到指定的caldata段,其他还有一些文件中的data段未映射到data,将lib中的其他data段也映射到caldata上。

    .caldata :{. = ALIGN(4);*(.caldata)  . = ALIGN(4);libASW.a(*(.data)). = ALIGN(4);} > ram_cal

通过该方式,将lib中的data段重映射到caldata段

在未映射时,lib中的data段会被分配到默认的data段(sram_data),地址不是单独的一块区域

在这里插入图片描述
重映射后,lib中的data数据被映射到caldata段,为指定地址

在这里插入图片描述

总结

使用该方法有一个弊端,就是标定量和观测量(若初始化不为0)无法区分,还是建议将标定量放在单独的文件中,这样维护起来更加方便。

http://www.lryc.cn/news/505225.html

相关文章:

  • 【十进制整数转换为其他进制数——短除形式的贪心算法】
  • 【JavaEE】网络(2)
  • AI for Science 的完美实践——科研文献的智慧化提取获得“综述性文摘”的软件开发
  • 前端使用xlsx.js实现 Excel 文件的导入与导出功能
  • React简单了解
  • backbone 和Run-Length Encoding (RLE)含义
  • 在Centos7上安装MySQL数据库 How to install MySQL on Centos 7
  • Linux docker-20.10.9安装
  • 操作系统(13)虚拟存储器
  • 《面向对象综合训练01~05》
  • 电脑为什么会提示“msvcr120.dll缺失”?“找不到msvcr120.dll文件”要怎么解决?
  • huggingface NLP-微调一个预训练模型
  • 【BUG记录】Apifox 参数传入 + 号变成空格的 BUG
  • Spring AI API 介绍
  • 【MySQL】Linux使用C语言连接安装
  • 2024年第十五届蓝桥杯青少组C++国赛—割点
  • 【软件开发】做出技术决策
  • Airborne使用教程
  • WPF实现曲线数据展示【案例:震动数据分析】
  • EasyExcel 动态设置表格的背景颜色和排列
  • 【 C++11 】类的新功能
  • 防止SQL注入:PHP安全最佳实践
  • 自动化生产或质量检测准备工作杂记
  • 张志辰医生
  • CodeMirror 如何动态更新definemode
  • 舵机SG90详解
  • 程序设计考题汇总(四:SQL练习)
  • 明达IOT平台助力工业废水运维智能化
  • 深入理解 Ansible Playbook:组件与实战
  • JavaEE初阶——多线程(线程安全-锁)