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.

[参考译文] TMDS570LS31HDK:获取.cinit 段的起始地址和结束地址。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1229981/tmds570ls31hdk-getting-start-and-end-address-of-cinit-section

器件型号:TMDS570LS31HDK
主题中讨论的其他器件:HALCOGEN

您好!

我正在尝试使用 SL_CRC_Calculate ()函数在闪存中生成 CRC。 但是、我找不到一种方法来访问存储器中.cinit 段的原始地址或起始地址。 我知道链接器提供了符号 __ TI_CINIT_Base 和 __TI_CINIT_Limit、但这并不涵盖从映射文件中可以看到的整个.cinit 段:

SECTION ALLOCATION MAP

 output                                  attributes/
section   page    origin      length       input sections
--------  ----  ----------  ----------   ----------------
.kernelTEXT 
*          0    00000020    00005604     
                  00000020    00002f04     os_tasks.obj (.kernelTEXT)
                  00002f24    000012dc     os_queue.obj (.kernelTEXT)
                  00004200    00000818     os_event_groups.obj (.kernelTEXT)
                  00004a18    000004b0     os_portasm.obj (.kernelTEXT)
                  00004ec8    000003e0     os_port.obj (.kernelTEXT)
                  000052a8    0000037c     os_heap.obj (.kernelTEXT)

.cinit     0    00005628    000000e8     
                  00005628    0000009d     (.cinit..data.load) [load image, compression = lzss]
                  000056c5    00000003     --HOLE-- [fill = 0]
                  000056c8    0000000c     (__TI_handler_table)
                  000056d4    00000009     (.cinit..kernelBSS.load) [load image, compression = lzss]
                  000056dd    00000003     --HOLE-- [fill = 0]
                  000056e0    00000008     (.cinit..bss.load) [load image, compression = zero_init]
                  000056e8    00000008     (.cinit..kernelHEAP.load) [load image, compression = zero_init]
                  000056f0    00000020     (__TI_cinit_table)

...

GLOBAL SYMBOLS: SORTED BY Symbol Address 

address   name                                                                             
-------   ----                                                                             
00000000  resetEntry                                                                       
....                                         
0000560c  vPortInitialiseBlocks                                                            
00005628  __TI_static_base__                                                               
000056c8  __TI_Handler_Table_Base                                                          
000056d4  __TI_Handler_Table_Limit                                                         
000056f0  __TI_CINIT_Base                                                                  
00005710  __TI_CINIT_Limit     

值得注意的是、  上一节结尾(结尾@ 0x5628)和__TI_STATIC_BASE_BASE (0x56f0)之间存在 __TI_ATIC_BASE__和__TI_Handler_Table_Base。

我找不到__TI_static_base__上的任何文档,也找不到处理程序表将始终显示在 Cinit 表之前的任何确认。 是否有方法可以捕获整个.cinit 段?  
谢谢!

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

    您好、Robin、

    我们已着手解决您的问题、并将很快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    cinit 段包含 C/C++程序的 autocinit 表。  _TI_CINIT_Base 和_TI_CINIT_Limit 指向该表的开头和结尾。

    但链接器 crc_table 的 CRC 值为整个.cinit 段(起始地址= 0x5628、大小= 0xe8)  

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

    您好、QJ。

    我应该已经说明了、我需要指向可以在 C 代码中引用的.cinit 段的开头和结尾的符号。  _TI_CINIT_Base 和 _TI_CINIT_LIMIT 符号只提供 autoinit 表的覆盖、但我需要确保 也可以覆盖.cinit .data.load 范围。 理想情况下、我会有一个指向起始地址0x5628和结束地址0x5710的符号。

    由于我使用的是 halcogen、因此我无法自行将符号插入该段、因为每次开发期间重新生成 halcogen 代码时、代码都会被覆盖。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于我正在使用 halcogen,我无法将符号自己插入到段中,因为每次我们在开发过程中重新生成 halcogen 代码时,代码都会被覆盖。

    您可以在预定义的/*用户代码 begin */内插入您自己的代码、否则您的代码将在您重新生成 HalCoGen 代码后消失。

    我会有一个指向起始地址0x5628和结束地址0x5710的符号。

    我不知道是否有任何指向起始地址的符号。  

     __ TI_CINIT_LIMIT 会回复到结束地址。

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

    您好、QJ:

    感谢您确认起始地址行为。 您知道 __ TI_static_base__用于什么吗? 它似乎是在.cinit 段的起始地址(0x5628)生成的、但我找不到任何文档确认这始终为真。

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

    .cinit 用于初始化的全局变量和静态变量。  __TI_static_base__不能指向.cinit 表的起始地址。  

    我找不到 __TI_static_base__的定义。

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

    好的、感谢确认 QJ。

    然后、我将找到一种权变措施。