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

news/2024/12/18 15:48:45/

文章目录

    • 前言
    • 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.ppmy.cn/news/1556151.html

相关文章

数据结构之栈和队列算法题

一&#xff1a;有效括号数 学了栈之后这一题就比较简单了。 思路&#xff1a;1、左括号进栈 2、右括号出栈匹配。 完整代码&#xff1a; 因为使用C语言写的&#xff0c;所以里面包含了栈的实现 #include<stdio.h> #include<stdlib.h> #include<assert.h>…

C语言基础-字符数组与字符串

字符数组 概念 元素类型为char字符型的数组&#xff0c;字符数组往往是用来存储字符串数据的。C语言中&#xff0c;字符是字节字符。 字节字符&#xff1a;一个字符占一个字节&#xff0c;在C语言中&#xff0c;使用char表示字节 char a A; char b 1; char c 65; //以上…

【AI知识】有监督学习分类任务之支持向量机

1.支持向量机概念 支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 是一种有监督学习算法&#xff0c;主要用于分类任务&#xff08;也可用于回归任务&#xff0c;即支持向量回归&#xff0c;SVR&#xff09;。SVM的核心思想是找到一个最优的超平面&#xff0…

/bin/bash^M: 解释器错误:没有那个文件或目录(bad interpreter: No such file or directiry)

/bin/bash^M: 解释器错误&#xff1a;没有那个文件或目录&#xff08;bad interpreter: No such file or directiry&#xff09; 问题描述 运行脚本时报错如下&#xff1a; /bin/bash^M: 解释器错误&#xff1a;没有那个文件或目录&#xff08;bad interpreter: No such file…

【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案

错误日志 [ 8754.700227] usb 2-3: new full-speed USB device number 3 using xhci_hcd [ 8754.867389] usb 2-3: New USB device found, idVendor0e0f, idProduct0002, bcdDevice 1.00 [ 8754.867421] usb 2-3: New USB device strings: Mfr1, Product2, SerialNumber0 [ 87…

yarn修改缓存位置

查看缓存位置 以下三个命令分别为&#xff1a;bin是yarn存储命令的二进制文件&#xff0c;global存储全局node_modules &#xff0c;cache存储用下下载缓存&#xff0c;查看本机目前的目录&#xff1a; 查看bin目录命令&#xff1a;yarn global bin 查看global目录命令&…

GCNet的简述

其中了解self-attention知道他的计算量是 Global Context Attention计算量变少从变成 NL&#xff1a; (a)首先resize成CHW然后通过11的卷积生成q&#xff0c;k&#xff0c;v&#xff0c;然后q乘 变成HWHW&#xff0c;然后通过softmax进行归一化然后和v进行乘&#xff0c;再通…

AI来了,云原生更稳了

不了解AI的时候&#xff0c;往往会将其视为洪水猛兽&#xff0c;因为AI确实具有颠覆一切的巨大能量&#xff1b;但是当你慢慢接近它、拥抱它甚至尝试驾驭它&#xff0c;你会发现AI如同其他许多新技术一样&#xff0c;都需要扎根的土壤、生长的养分和成熟过程中适宜的环境等。 “…