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

目录

1.概述

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

3.小结


1.概述

上文TC3xx分析--如何提高系统运行效率(1)-CSDN博客讲解了Tasking中lsl的某些关键定义,简述了Tricore寻址模式,接下来我们继续看,不同memory限定符对于代码的影响。

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

上篇文章我们发现了利用不同限定符将变量发到不用的section里,但是变量的地址始终没有变化,那这到底有什么用呢?

编译出来的C代码最终会以汇编形式展示给机器,因此我们来看看不同限定符下对于代码的影响。

1)添加__near限定符,编译得到的结构,代码如下:

uint32 __near example_x ;
uint32 __near example_y;
void main(void)
{
        example_x = 3;
        example_y=example_x+2;
}

得到汇编代码如下

解释如下:

  • 将立即数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;
}

汇编代码如下:

解释如下:

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代码,仅仅因为寻址方式的不同,汇编指令差异如此之大 ,从而影响系统运行效率。

3.小结

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

  1. 构建memory限定符使用场景以优化代码执行效率;
  2. 多使用靠近CPU的memory,例如ARM TCM、Tricore DSPR、PSPR;
  3. DCache数据一致性问题

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

就酱!

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值