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

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

3天内不再提示

优化TC3xx系统运行效率的策略

汽车ECU开发 来源:汽车ECU开发 2024-11-16 11:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录

1.Tricore寻址模式

2.lsl链接文件Section分析

3.限定符对于代码的影响

4.小结

1.Tricore寻址模式

今天聊个好玩的事情。 之前ARM培训的时候,他们对于函数形参的先后顺序、数据类型、对齐方式等等做了介绍,详细分析了上述操作不同写法对于CPU的通用寄存器使用效率上的影响,这给我留下了一点印象,但不多。 而最近我在用ADS验英飞凌LMU、DSPR、PSRP等等访问效率时,发现了这样一行代码:

#pragma section farbss lmubss
#pragma ,section,咱们都非常熟悉了,这个farbss是什么意思呢?以前做BSW还真没多大关注这个。 查看Tasking的手册,得到了一些答案,如下:

f2a05598-907f-11ef-a511-92fbcf53809c.png

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

f2bd716e-907f-11ef-a511-92fbcf53809c.png

总共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,其用法如下:

f2d154e0-907f-11ef-a511-92fbcf53809c.png

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

f2ddd788-907f-11ef-a511-92fbcf53809c.png

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

f2ea7b5a-907f-11ef-a511-92fbcf53809c.png

利用高四位定位segment,利用低14位定位目标,而2^14刚好为16KB,这与Tasking memory限定符__near关联。 基地址+偏移:主要用于局部变量、静态数据等访问,根据偏移的不同寻址方式可以分为short offset寻址(10 bits)和long offset寻址(16bits)。long offset寻址刚好就对应__a0a1a8a9访问。 故对于寻址方式与限定符关联关系如下:

f303fd1e-907f-11ef-a511-92fbcf53809c.png

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

2.lsl链接文件Section分析

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



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


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

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

f3102440-907f-11ef-a511-92fbcf53809c.png

.bss:未初始化数据

.bss_a0a1a8a9:未初始化数据,用寄存器A0A1A8A9寻址

.data:已初始化数据

.data_a0a1a8a9:已初始化的数据,用寄存器A0A1A8A9寻址

.sbss:未初始化的数据,a0寻址

.sdata:已初始化的数据,a0寻址

.zbss:未初始化数据,abs18寻址

.zdata:已初始化数据,abs18寻址

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

f3360926-907f-11ef-a511-92fbcf53809c.png

编译生成出来的map,可以看到这两个变量是放在.bss中: f349f152-907f-11ef-a511-92fbcf53809c.png 对应lsl定义的Far Data Section:

f35eeb66-907f-11ef-a511-92fbcf53809c.png

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

uint32 __near example_x ;
uint32 __near example_y;

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

f38aa0e4-907f-11ef-a511-92fbcf53809c.png

如果加上限定符__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_

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

3.限定符对于代码的影响

第二节我们发现了利用不同限定符将变量发到不同的section里,但是变量的地址始终没有变化,那这到底有什么用呢? 编译出来的C代码最终会以汇编形式展示给机器,因此我们来看看不同限定符下对于代码的影响。 1)添加__near限定符,编译得到的结构,代码如下:

uint32 __near example_x ;
uint32 __near example_y;
void main(void)
{
example_x = 3;
example_y=example_x+2;
}
得到汇编代码如下

f3969ba6-907f-11ef-a511-92fbcf53809c.png

解释如下:

将立即数3赋给寄存器D15

D15的值直接赋给变量(x)

立即数3赋给寄存器D15

D15和2相加

将D15的值直接赋给变量(y)

统计拢共5条指令完成x=3,y=x+2这个操作; 2)添加__far限定符,得到如下

uint32 __far example_x ;
uint32 __far example_y;
void main(void)
{
example_x = 3;
example_y=example_x+2;
}
汇编代码如下:

f3b1b2e2-907f-11ef-a511-92fbcf53809c.png

解释如下:

x的赋值:

将0x7000给到地址寄存器A15高16bit,低位补0,这时候A15 = 0x70000000

加载有效地址到A15,因为x地址为0x70000004,故A15 = 0x70000004

将数据3移至D15;

将D15赋给A15指向的地址

y的赋值

将0x7000给到地址寄存器A15高16bit,低位补0,这时候A15 = 0x70000000

加载有效地址到A15,因为y地址为0x70000008,故A15 = 0x70000008

将数据3移至D15,并加2;

将D15赋给A15指向的地址

总计9条指令,咋一看仅仅节省了4条指令,但从统计角度来看,效率提升了44.44%,Flash消耗更少了。 同样两行C代码,仅仅因为寻址方式的不同,汇编指令差异如此之大 ,从而影响系统运行效率。

4.小结

现在MCU的性能越来越强大,导致我在使用上越来越随意,对于这种特别底层的知识非常匮乏,直到遇到了系统优化问题,才会去从这些角度来考虑。总结下来,在系统性能优化时要注意:

构建memory限定符使用场景以优化代码执行效率;

多使用靠近CPU的memory,例如ARM TCM、Tricore DSPR、PSPR;

DCache数据一致性问题

通过调试汇编代码,也更进一步了解了Tricore内核的运行原理;接下来,思考如何将这些理论引入到工程代码中。

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

    关注

    31

    文章

    5589

    浏览量

    129057
  • 效率
    +关注

    关注

    0

    文章

    151

    浏览量

    20781
  • TriCore
    +关注

    关注

    0

    文章

    15

    浏览量

    12064

原文标题:TC3xx分析--如何提高系统运行效率

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32 MCU在高频率运行下的系统稳定性的提升方案

    问题,并提出一系列应对措施,包括硬件设计改进和软件优化策略,以确保系统在高频工作环境中的可靠性和持续稳定运行。 具体内容包括: 高频运行
    发表于 12-04 08:04

    通过优化代码来提高MCU运行效率

    调用开销。 使用 const 和 volatile 关键字,帮助编译器进行更好的优化。 数据类型选择 使用与MCU字长匹配的数据类型。在32位MCU上,int 和 uint32_t 的处理效率通常
    发表于 11-12 08:21

    蜂鸟E203内核优化方法

    。 修改内核参数:对蜂鸟E203的内核参数进行相应修改,可以优化内核运行效率,提高系统性能,比如调整缓存大小、内存分配策略等。 资源管理:进
    发表于 10-21 07:55

    PCIM2025论文摘要 | 针对储能系统应用(ESS)的优化驱动器设计策略

    本论文摘要由PCIM官方授权发布1简介本文介绍了一种用于储能系统(ESS)的自适应驱动器优化策略,以应对过载可靠性和运行效率方面的挑战。通过
    的头像 发表于 08-15 17:34 752次阅读
    PCIM2025论文摘要 | 针对储能<b class='flag-5'>系统</b>应用(ESS)的<b class='flag-5'>优化</b>驱动器设计<b class='flag-5'>策略</b>

    请问如何仅使用软件和 TC375 精简板来测量函数调用的堆栈使用情况?

    我想测量 AURIX TriCore™ TC3xx 项目的函数调用的堆栈使用情况。 我不知道该怎么做。 我知道事实上作为硬件我只有一个 TC375 lite 开发板,没有 BlueBox 或任何
    发表于 08-08 07:28

    TC3XX 的端口可以同时被 EvADC 和 DSADC 用于 ADC 转换吗?

    1、TC3XX 的端口可以同时被 EvADC 和 DSADC 用于 ADC 转换吗? 例如,TC36X系列的AN1引脚 2、同时重新分配同一个引脚,是否会影响EVAADC和DSADC的转换结果的精度和速度?
    发表于 08-07 08:19

    两片TC3XX芯片之间的时钟同步可以实现吗?

    实现两片TC3XX芯片之间的时钟同步,希望两片芯片的PWM输出能够同步。类似功能的芯片能实现上述操作吗?期待你的答复。非常感谢!!!
    发表于 08-04 07:51

    TC3XX /TC1.6.2OCDS如何通过软件启用核心调试控制器?

    如何通过软件启用核心调试控制器?也就是说可以通过软件读取DBGSR.DE =1。参考TriCore™ TM TC1.6.2 核心架构手册第 1 卷。
    发表于 07-30 06:27

    三相电机驱动系统逆变器故障补救与容错策略

    系统在不损失性能指标或部分性能指标有所降低的情况下安全运行。容错和补救的前提是要对系统中的故障进行诊断定位和隔离,对于逆变器故障,人们已提出了很多诊断和定位方法,文献[3-7]对其进行
    发表于 06-12 14:01

    请问tc3xx如何配置多个dedicatedRxBuffersNumber?

    tc3xx如何配置多个dedicatedRxBuffersNumber?
    发表于 04-21 07:53

    基于Infineon TC4D9+TLF4D985的Aurix StartKit

    状态预测,提升续航里程、充电速度和电池寿命;牵引逆变器领域,其创新cDSP与虚拟传感技术优化能量回收与控制策略;在电源转换方面,TC4xx支持SiC和GaN材料,集成高效控制功能,提升系统
    的头像 发表于 04-16 14:16 1260次阅读
    基于Infineon <b class='flag-5'>TC</b>4D9+TLF4D985的Aurix StartKit

    电机大范围调速的综合电压调制策略

    提高大范围调速电机的运行效率,为系统的高效运行提供了有效途径。 纯分享帖,需要者可点击附件获取完整资料~~~ (免责声明:本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如
    发表于 04-01 14:51

    嵌入式系统存储的软件优化策略

    上抵消单位寿命低的劣势。 (3)NAND的相关特点 ·系统的驱动主要是由SoC厂家及系统上游逻辑决定,针对不同的NAND存储介质无法发挥出最大优势,或者存在驱动逻辑兼容性问题。 ·NAND容易出现位
    发表于 02-28 14:17

    EE-401:ADSP-SC5xx/215xx SHARC处理器系统优化技术

    电子发烧友网站提供《EE-401:ADSP-SC5xx/215xx SHARC处理器系统优化技术.pdf》资料免费下载
    发表于 01-06 15:23 0次下载
    EE-401:ADSP-SC5<b class='flag-5'>xx</b>/215<b class='flag-5'>xx</b> SHARC处理器<b class='flag-5'>系统</b><b class='flag-5'>优化</b>技术

    电力系统中电动车充电桩布局与调度的优化策略探究

    ,精准确定充电桩的最优布局方案。同时,结合电力系统运行模式、电网状况及充电桩运营成本,设计出充电桩调度模型,并运用启发式算法得出最佳调度策略。研究成果显示,此方案显著优化了充电桩的布局
    的头像 发表于 12-13 16:39 2146次阅读
    电力<b class='flag-5'>系统</b>中电动车充电桩布局与调度的<b class='flag-5'>优化</b><b class='flag-5'>策略</b>探究