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.

[参考译文] 编译器/CC1310:如何在末尾链接段

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/696716/compiler-cc1310-how-to-linked-a-section-at-the-end

器件型号:CC1310
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI C/C++编译器

您好!

我正在修改我的 cmd 链接器文件、并且我希望一个段在所有其他段之后进行链接、但每次我尝试时、我的段不是最后一个、并且在(.cinit)之后始终有一个段链接。 是否有方法在二进制文件的末尾链接一个段?

此致、

欧雷利恩

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

    0001739c 加密驱动器表
    000173c4 rfPatchTable
    000173d4 txPwrTbl
    000173e0 _ccfg
    00017438 VERSION_HEADER
    00017470 __TI_STATIC_BASE__
    00017838 __TI_Handler_Table_Base
    00017844 __TI_Handler_Table_Limit
    000178___ TI_CINIT_Base
    000178d8 _TI_CINIT_LIMIT
    0001e000 nV_FLASH
    1001a001 ti_SysBIOS_KNL_Semaphore_pend__E

    实际上、我希望我的版本标头放在末尾、也就是0x000178d8之后。 可能性。

    此致、

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

    部分

    .intvecs :>闪存
    .text :>闪存
    CONFIG_CONST{mac_user_config.obj (.const)}> FLASH

    .const :>闪存
    .constdata :>闪存
    rodata :>闪存
    .cinit :>闪存
    .pinit :>闪存
    init_array :>闪存
    .EMB_TEXT :>闪存
    .ccfg :>闪存
    .vheader :>闪存

    Group (组)> SRAM

    .data
    .bss
    .vtable
    .vtable_ram
    VTABLE RAM
    sysmem
    .nonretenvar
    } load_end (heapStart)

    堆栈 :> SRAM (高电平) load_start (heapEnd)

    .shared_ram :> shared_RAM

    如果已定义#if (use_cache_RAM)
    .cache_ram :> cache_RAM
    #endif


    但是,当我使用此链接器文件时,iCall_Init 不再开始...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您希望哪个部分是最后一个?  使用 HIGH 位置说明符、正如您已经使用.stack 所做的那样、

    [引用 user="user5061660"].stack:> SRAM (HIGH) load_start (heapEnd)[/quot]

    使该段成为该存储器范围中的最后一个段。

    谢谢、此致、

    乔治

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

    您好!

    我希望.vheader 是最后一个。 这是我的版本标头、我想在之前的所有二进制器件上计算我的 CRC。 如果我使用(高电平)、它将恰好放置在之前未使用字节的段的末尾、我不希望这样做。

    此致、

    欧雷利恩

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

    当我使用此功能时:

    #define FLASH_base 0x00001000
    #define FLASH_BASE_SIZE 0x1D000
    [...]
    闪存(RX):origin = flash_BASE,length = flash_BASE_SIZE
    [...]
    .vheader :>闪光灯(高电平)

    在我的代码中:

    const volatile sVERSION_HEADER VERSION_HEADER __attribute__((section (".vheader"))={

    我始终在 iCall_init 中有一个断言... 是否有解释?

    此致、

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

    [引用 user="user5061660">我希望.vheader 是最后一个。 这是我的版本标头、我想在之前的所有二进制器件上计算我的 CRC。 如果我使用(高电平)、它将恰好放置在之前未使用字节的段的末尾、我不希望这样做。
    [/报价]

    则唯一的方法是使用组。  .vheader 之前必须包含的所有内容都必须位于 GROUP 中。  然后、.vheader 会变为最后一个。

    一个可能的缺点 您可能会看到一个类似这个的诊断...

    警告:输出段".data"是指加载符号"_nop"、因此无法
    压缩;压缩"lzss"会被忽略 

    长故事短... 这意味着.data 段可以变得更小。  链接器尝试应用压缩技术、但无法应用。  如果您达到了存储器大小目标、则可以忽略此诊断。

    谢谢、此致、

    乔治

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

    [引用 user="user5061660">我始终在 iCall_init 中有一个断言... 是否有解释?

    我不确定你的断言是什么意思。  您认为什么会导致您认为某件事是错误的?  您是如何看到它的?

    谢谢、此致、

    乔治

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

    非常感谢。 我确实使用了 Group 方法、它工作得非常完美。 关于断言,这是由于我的代码:)

    此致、

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

    我已经按照你的要求完成了,实际上 vheaderm 也会到最后,但是正如你已经说过的那样,我有这种警告:

    输出段".data:ti_sysbios_BIOS_Module_state__v"是指加载符号"ti_sysbios_BIOS_startFunc_i"、因此无法压缩;压缩"lzss"会被忽略

    输出段".data"是指加载符号"iCall_enterCSImpl"、因此无法压缩;压缩"lzss"会被忽略

    我认为我不会失去这么多的闪存,因为两个未压缩的部分不是很大,但如果你知道如何避免这些警告,你可以随意分享:)

    此致、

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

    [报价 USER="user5061660"]如果您知道如何避免这些警告,则可以随意分享:)

    不要将段.cinit 和.data 放在同一个组中。  cinit 引用的任何其他段也是如此。

    对这种情况的充分解释是很长很详细的。   请参阅此主题以开始。

    谢谢、此致、

    乔治

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

    实际上,当我将.cinit 放在不同的组中时,警告消失了,但“.cinit”会转到闪存的末尾,就在我的 vheadersection 的正上方,我不想这样做:(

    我将看一下您共享的主题。

    非常感谢

    此致、

    欧雷利恩