TC3xx分析--如何提高系统运行效率(1)

目录

1.Tricore寻址模式

2.lsl链接文件Section分析

3.小结


1.Tricore寻址模式

今天聊个好玩的事情。

之前ARM培训的时候,他们对于函数形参的先后顺序、数据类型、对齐方式等等做了介绍,详细分析了上述操作不同写法对于CPU的通用寄存器使用效率上的影响,这给我留下了一点印象,但不多。

而最近我在用ADS验英飞凌LMU、DSPR、PSRP等等访问效率时,发现了这样一行代码:

#pragma section farbss lmubss

#pragma ,section,咱们都非常熟悉了,这个farbss是什么意思呢?以前做BSW还真没多大关注这个。

查看Tasking的手册,得到了一些答案,如下:

可以看到,上述farbss这类属于lsl里的section类型,而对于其memory 限定符则为__far,它表示远程数据,需要直接寻址;再看其他的限定符,分别出现了__a0,__a1等等,很明显讲的是Tricore内核的寻址模式,那么顺着这个思路来捋捋线索,为代码能力和系统优化打基础。

Tricore 1.6.2的编程模型长这样:

总共32个通用寄存器,其中16个作为数据寄存器D[0]-D[15],16个作为地址寄存器A[0]-A[15], 特别的,A[0]、A[1]、A[8]、A[9]还可以作为系统Global寄存器进行使用,我们再回过头来看看Tasking文件里给的memory限定符,似乎有某种联系,因此接下来我们了解Tricore的寻址模式。

Tricore是32位机,很明显可以访问4GBytes(2^32)的memory空间,这4GB空间分成了16个Segment[0H-FH],用地址高四位来索引,每个Segment为256MBytes,其用法如下:

所谓寻址模式,就是Load\Store这类指令访问数据元素的机制,这些数据元素长度可以为8\16\32\64bits。Tricore提供了7种寻址模式,如下图:

绝对寻址:主要用于I/O 外设寄存器和全局数据的访问,值得一提的是,这种方式只能访问每个segment的前16K,原因如下:

利用高四位定位segment,利用低14位定位目标,而2^14刚好为16KB,这与Tasking memory限定符__near关联。

基地址+偏移:主要用于局部变量、静态数据等访问,根据偏移的不同寻址方式可以分为short offset寻址(10 bits)和long offset寻址(16bits)。 long offset寻址刚好就对应__a0\a1\a8\a9访问。

故对于寻址方式与限定符关联关系如下:

那这个__far到底指的是什么呢?根据手册描述,指的是能够访问所有memory区域的数据,难不成这些个限定符还会对汇编代码有所影响吗?这些限定符与链接文件有没有关联呢?

2.lsl链接文件Section分析

 在ADS给的lsl模板中,可以看到关于上述限定符以及对应section type的描述,例如:

/*Near Abbsolute Addressable Data Sections*/
section_layout :vtc:abs18
{
    group
    {
    }
}

/*Relative A0/A1/A8/A9 Addressable Sections*/
section_layout :vtc:linear
{
    group
    {
    }
}

其中,abs18表示18bit绝对寻址空间,linear表示线性地址空间,如下图所示:

  • .bss:未初始化数据
  • .bss_a0\a1\a8\a9:未初始化数据,用寄存器A0\A1\A8\A9寻址
  • .data:已初始化数据
  • .data_a0\a1\a8\a9:已初始化的数据,用寄存器A0\A1\A8\A9寻址
  • .sbss:未初始化的数据,a0寻址
  • .sdata:已初始化的数据,a0寻址
  • .zbss:未初始化数据,abs18寻址
  • .zdata:已初始化数据,abs18寻址

 我们在Cpu0_main.c里定义两个变量,不添加任何限定符,如下:

编译生成出来的map,可以看到这两个变量是放在.bss中:

 对应lsl定义的Far Data Section:

如果加上限定符__near,如下:

uint32 __near example_x ;
uint32 __near example_y;

编译出来发现已经放到了zbss段

如果加上限定符__a0,我们会发现这时候编译出了问题,如下:

ltc E121: relocation error in "task1": relocation value 0x50000000, type R_TRICORE_16SM, offset 0x34, section ".text.Cpu0_Main.core0_main" at address 0x800023bc is not within a 16-bit signed range from the value of A0 as defined by the symbol _SMALL_DATA_

这就意味着,如果要使用寄存器+偏移寻址的方式,那么就必须是A0\A1...寄存器中内容上下偏移±32KB,例如,当A0寄存器里内容为0x70018000时,那么通过A0寄存器寻址的所有变量就应该在0xD0010000 - 0xD001FFFF。这个场景后面构建了我们再讨论,但至少我们确定了利用寄存器+偏移的方式多用于局部变量访问。

3.小结

本文讲解了Tasking中lsl的某些关键定义,简述了Tricore寻址模式,下一篇我们继续看,不同memory限定符对于代码的影响。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659687.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【linux】运维-基础知识-认知hahoop周边

1. HDFS HDFS(Hadoop Distributed File System)–Hadoop分布式文件存储系统 源自于Google的GFS论文,HDFS是GFS的克隆版 HDFS是Hadoop中数据存储和管理的基础 他是一个高容错的系统,能够自动解决硬件故障,eg&#xff1a…

【旧文更新】基于OpenCV的Python人脸识别、检测、框选 (遍历目录下所有照片依次识别 视频随时标注)

【旧文更新】基于OpenCV的Python人脸识别、检测、框选 (遍历目录下所有照片依次识别 视频随时标注) 文章目录 关于旧文新发一、功能概览二、使用说明三、分部测试功能程序1.遍历目录功能2.界面获取目录功能3.人脸框选功能4.摄像头及框选功能5.延时功能 …

若依框架官网

RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0…

Linux--进程间通信(2)(有名管道)

目录 1.原理 2.创建命名管道 3.使用命名通道实现简单的通信 4.使用创建的命名管道 1.原理 匿名管道没有名称,它们是通过句柄在父进程和子进程之间传递的。这意味着匿名管道只能用于具有父子关系的进程之间。 但如果程序之间没关系,那么这时候就要用…

香橙派AIpro初体验

1.开发板资料 开发板资源 产品介绍主页:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html开发板案例源码:https://gitee.com/ascend/EdgeAndRobotics工具&原理图&案例源码&开发手册&#x…

Centos安装,window、ubuntus双系统基础上安装Centos安装

文章目录 前言一、准备工作二、开始安装1、2、首先选择DATE&TIME2、选择最小安装3、 选择安装位置 总结 前言 因工作需要,我需要在工控机上额外装Centos7系统,不过我是装在机械硬盘上了不知道对性能是否有影响,若有影响,后面…

整理了六个正规靠谱的兼职赚钱软件,适合普通人做的兼职副业~

​随着互联网时代的到来,越来越多的人选择通过互联网赚钱。在这篇文章中,我们将探讨一些可以在网上长期赚钱的方法。 在网络上面其实有很多的赚钱方法,尽管方法很多,但是对于一些网络新手,刚进入互联网圈子不久的伙伴…

gradio image 类型

3种类型,默认是 numpy.array numpy.array PIL.Image str file path. 互相转换 # 从路径到 numpy.ndarray import cv2 image_mask cv2.imread(imagePath) print(type(image_mask))# 从路径到 PIL.IMAGE from PIL import Image image_maskImage.open(imagePath) pri…

记录第一次使用U盘重装系统(win10专业版)的流程与总结

写在前面 刚进大学那会儿不懂电脑,什么东西都往 C 盘装,以至于很多环境、文件这些都很乱 尽管我已经把能移的都移动到 D盘了,能清理的东西也清理了,C 盘还是时不时会爆红 刚好最近 CTF 比赛打得差不多了,因此勇师傅决定…

2024 GIAC 全球互联网架构大会:拓数派向量数据库 PieCloudVector 架构设计与案例实践

5月24-25日,msup 和高可用架构联合举办了第11届 GIAC 全球互联网架构大会。会议聚焦“共话AI技术的最新进展、架构实践和未来趋势”主题,邀请了 100 余位行业内的领军人物和革新者,分享”Agent/RAG 技术、云原生、基座大模型“等多个热门技术…

以果决其行的古圣先贤

大家好,昨天给大家讲倪海夏老师以果决其行,这个思维逻辑,能解天下的万事万物,讲之前想的时候,想到了要讲历史上的人物,但是讲的当时忘了,今天补出来。 我们现在往前捋,在建国以后,我…

FineReport帆软设计器,远程连接服务器

FineReport报表工具一款纯Java编写的企业级web报表软件工具。它能够全面支持主流的B/S架构以及传统的C/S架构,部署方式简单而灵活. 需要使用FineReport帆软设计器,配置远程服务器的方式如下: 1、打开帆软设计器,点击文件&#x…

ModuleNotFoundError: No module named ‘qcloud_cos‘

这个错误表示Python无法找到名为qcloud_cos的模块。qcloud_cos是腾讯云提供的一个Python SDK,用于与腾讯云对象存储(COS)服务进行交互。 使用pip安装qcloud_cos报以下错误 解决办法 pip3 install cos-python-sdk-v5

优思学院:什么是DMADV模式?和DMAIC有何区别?

在现代企业管理中,质量管理是一项至关重要的工作。六西格玛管理法作为一种高效的质量管理方法,已在全球范围内得到了广泛应用。它不仅在制造业中发挥了巨大的作用,在服务业和其他行业中也同样表现出了强大的生命力。六西格玛管理法主要有两种…

GDPU Java 天码行空13

(一)实验目的 1、掌握JAVA中与网络程序开发相关的知识点; 2、理解并掌握网络编程开发思想及方法; 3、熟悉项目开发的分包方法和依据; 4、实现聊天室中客服端和服务器端的实现方法; 5、熟悉多线程程序开发方…

可视化大屏:随意堆数据,错!要主次分明、重点突出,动静结合。

可视化大屏是一种展示数据的方式,它的设计应该遵循一些原则,以确保信息的传递和理解效果最佳。以下是一些关键点,可以帮助设计出主次分明、重点突出、动静结合的可视化大屏: 定义目标和重点: 在开始设计可视化大屏之前…

亚马逊云服务器会不会限制服务器使用?

亚马逊云服务器(Amazon Web Services,AWS)是全球领先的云计算服务提供商之一,其强大的基础设施和灵活的服务模式吸引了无数企业和个人用户。然而,许多人对于亚马逊云服务器是否会对服务器使用进行限制存在疑虑。我们九…

NI PXIe-7857R与PXIe-8842的区别

一、NI PXIe-7857R 类型: FPGA模块:基于FPGA的可编程I/O模块。 主要功能: FPGA处理:包含Xilinx Kintex-7 FPGA,支持自定义逻辑和处理。 I/O接口:提供丰富的模拟和数字I/O通道。 高速数据处理&#xff1a…

留守儿童|基于SprinBoot+vue的留守儿童爱心网站(源码+数据库+文档)

留守儿童爱心网站 目录 基于SprinBootvue的留守儿童爱心网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

云计算-无服务器计算与AWS Lambda (Serverless Computing with AWS Lambda)

AWS Lambda 无服务器计算与AWS Lambda AWS Lambda支持无服务器计算,不需要任何预配置和管理,同时还能最大限度地降低成本。我们将看到如何创建一个简单的Lambda函数,以及如何将其与AWS事件映射。在现实生活中,任何托管在线的应用…