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.

[参考译文] TMS320F28388D:18.1.3.LTS 编译器中的 autoinit.c 文件的用途

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/969807/tms320f28388d-purpose-of-autoinit-c-file-from-18-1-3-lts-compiler

器件型号:TMS320F28388D

您好!

在18.1.3编译器文件中、autoinit.c 文件中的函数"_TI_auto_init_template"有何用途?

您能否解释以下代码片段的流程?

uint16_t inited_wdt;
IF (WDTCTL_PTR)

Initial _WDT =* WDTCTL_PTR;
* WDTCTL_PTR = HOLD_WDT;

run_cinit();

IF (WDTCTL_PTR)
*WDTCTL_PTR = RESTORE_WDT (inited_WDT);

 

谢谢、

Subha。

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

    Subha、

    _TI_auto_init_template 是一个辅助函数。 它从其他函数调用、例如 autoinit.c 中的_TI_auto_init _TI_auto_init 是 C/C++运行时环境初始化的一部分、并从_c_int00调用。

    有关详细信息、请参阅《TMS320C28x 优化 C/C++编译器用户指南》的"系统初始化"部分。

    Ajay

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

    我参考了该特定部分。

    我想知道这个特定代码片段的作用是什么?

    uint16_t inited_wdt;
    IF (WDTCTL_PTR)

    Initial _WDT =* WDTCTL_PTR;
    * WDTCTL_PTR = HOLD_WDT;

    run_cinit();

    IF (WDTCTL_PTR)
    *WDTCTL_PTR = RESTORE_WDT (inited_WDT);

     _TI_auto_init_template 函数中的看门狗功能是什么

    谢谢

    Subha。

     

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

    如果 WDTCTL_PTR 不为 NULL、代码片段会在调用 run_cinit()时禁用并恢复看门狗计时器。 对于 C28x、WDTCTL_PTR 为 NULL、此代码不会在 C28x 上运行。 autobinit.c 在多个架构之间共享。  

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

    您好、Ajay、

    请告诉我这些宏值是什么?

    以及从何处获取它们。

    我想我不能得到一些价值!

    必须有一个文档、我可以在其中获取有关 autocinit 的详细信息。 我查看了编译器手册  spru514v  并获得了流程、但我确实需要对看门狗寄存器的值进行一些澄清。

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

    TI 发布了多种不同的 C/C++编译器。  几乎所有 RTS 源代码都在所有这些编译器之间共享、包括文件 autosinit.c 因此、该文件中的代码从未被 C28x 编译器使用、但被其他编译器使用。

    此帖子的其余部分讨论了 autocinit.c 中的代码行  从...开始

    /********* //*
    标准顶级自动初始化 */
    ********* /
    static __inline __attribute__(always_inline)
    void __TI_auto_init_template (int run_BINIT、int run_Pinit、
    volatile uint16_t* WDTCTL_PTR)
    {
    

    由于 always_inline 属性、对该函数的每次调用都被内联。  它与长宏不完全相同、但它与之类似。

    接下来,请考虑...

    define 专业化(".text:__TI_auto_init_nobinit")
    void __TI_auto_init_nobinit (void)
    {
    __TI_auto_init_template (0、1、
    
    
    init);} define _specialization (".text:__TI_auto_init_nonbin")
    void __TI_auto_init_template (0、
    
    
    
    
    
    void TI_init_init_init_init_0_init_init_init_init_init_init_otegoture_0_TI_NObinit);{_init_init_init_init_init_init_init_init_init_init_init_init_init_init_init_init_init_NObinit_0_NObinit_init_NObinit"}
    
    
    
    
    

    这些函数中的每一个都使用不同的参数调用__TI_auto_init_template。  源文件 boot28.asm 中的引导例程具有以下指令...

    LCR #_TI_auto_init
    

    链接器将符号_TI_auto_init 映射到 auto_init 中实现的其中一个 auto_init 变体  在 C28x 编译器的特定情况下、链接器始终从我上面显示的三个函数中进行选择。  例如、符号_TI_auto_init 可映射到符号_TI_auto_init_nobinit_nopinit

    出于您的目的、需要注意的重要细节是、可能被调用的每个__TI_auto_init_template 实例都具有 NULL 作为最后一个参数。  这意味着参数 WDTCTL_PTR 始终为 NULL。  当对_TI_auto_init_template 的调用被内联、并且每个 WDTCTL_PTR 实例都替换为 NULL 时、与看门狗计时器相关的所有代码在编译时都会被删除。  因此、对于 C28x 编译器、autocinit 函数中不存在看门狗计时器代码。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    感谢您的详细说明。

    我知道 、 对于 C28x 情况、WDTCTL_PTR 始终为 NULL。

    之前、我们需要将看门狗宏值和相关信息添加到文档制作过程中。 但是、由于 C28x 没有使用、因此我们可以将其删除。

    此致

    Gurusha

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

    尊敬的乔治:

    另一个问题是有关引导例程流程的问题。

    当 auto_init_template 调用 cinit()函数时,为了处理压缩的 ELF cinit 表,它将执行步骤4调用处理程序(load_addr + 1,run_addr),在这里定义了该处理程序?

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

    请在 C28x 嵌入式应用二进制接口中搜索 标题为 复制表和变量初始化的子章节。  下面是一个关键通道:

    处理程序索引的分配不是固定的;链接器会根据每个应用程序所需的解压缩例程为每个应用程序重新分配索引。 处理程序表生成到可执行文件的.cinit 段中。

    因此、由链接器列出了由该 C 代码处理的表。  处理程序来自该表中的条目。  要充分理解它、需要阅读本小节的所有内容。

    谢谢、此致、

    乔治