This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM263P4-Q1:_TI_auto_init 函数的行为差异

Guru**** 2999690 points

Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1656290/am263p4-q1-difference-in-behaviour-of-__ti_auto_init-function

器件型号: AM263P4-Q1

尊敬的专家:  

我正在撰写 与 客户提出的问题相关的问题。 我想讨论一下我在 Cortex-R5 目标(器件是 AM263P)上使用 TI ARM Clang 编译器观察到的一种反直觉行为。

 设置:
 编译器:TI ARM Clang v4.0.x.LTS
 -目标: ARM Cortex-R5(从 L2 SRAM 运行)
 -链接器初始化模型:- rom_model

 观察结果:

我正在测量_TI_auto_init 的周期计数。 从引导代码调用_TI_auto_init。  

当 main() 中存在特定的函数调用时、初始化所需的时间更少
 周期 (~448K)。 当相同的函数调用被注释掉时、初始化需要更多的周期 (~555K)、这是~107K 个周期的差异。

这违反直觉、因为删除函数调用会使二进制变小、但初始化会变慢。

 到目前为止、我已经找到了:

 1.删除函数调用会将 main() 缩小~10 个字节。
 2.这会使链接器移动.text 中放在 main () 之后的所有函数。
 3.移位后的地址更改存储在.data 段中的函数指针值(特别是~240 字节的 I/O 函数表)。
 4、通过禁用缓存来分析__TI_auto_init 的执行周期。 但观察结果却是一样的。  
  
函数调用的上下文:                                                                                    
 所涉及的函数是 Dio_Write (),一个标准的 AUTOSAR MCAL 数字 I/O 驱动程序 API ,在整个应用程序中用于 GPIO 操作。 它已在中多次调用
 正常执行流程(在 DIO 驱动程序验证中,引脚读取,写入和切换)。 我注释掉的特定实例是在 main() 末尾附加一个 GPIO 写入。 减少
 这不是一个异常或合成的添加,它是一个常规的驱动程序调用,任何开发人员可能会添加或删除在正常的应用程序开发过程中。 观察结果是、这是一条平凡的单线
 源更改(添加或删除一个现有的 API 调用)会导致__TI_auto_init 出现~107K 周期差异、该差异在 main () 偶数运行之前执行。
  
 我还会附加测试的映射文件。 我已经在存在此函数调用以及函数调用不存在的情况下复制了映射文件。

为什么这对客户很重要:
客户正在其应用中配置看门狗时间。 器件启动代码的这种变化会影响其 WDG 超时计算  
  
 请帮助我们了解这种行为。
  

附加地图文件、

with-additional-fn-call.txt 

without-additional-fn-call.txt 

 

dio_app_sip.zip 

 

我还附上了该项目。

这里是_TI_auto_init 函数: utils/boot_armv7r_asm.asm

image.png

 

这是我要引用的附加函数调用:example/DioApp.c

image.png


 此致、
 Aswin