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.

[参考译文] CCS:CCS 链接器命令语法(fill、align (0x10)……)

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/922630/ccs-ccs-linker-command-syntax-fill-align-0x10

工具/软件:Code Composer Studio

尊敬的所有专家:

我正在学习 CCS 链接器通信文件编辑。

我已经从互联网上读取了一些指令、并且可以理解大多数命令。

我刚刚获得了一个命令文件示例、无法理解其中的一些语法?

您想知道 它的含义吗?  

命令如下所示、感谢您的帮助

.stack  {} > IRAM、fill=00c0ffeh、align (0x10)    >> fill=00c0ffeh 和 align (0x10)是什么意思

以下哪一项意味着什么?

.IRAM_Heap:fill=00c0ffeeh{
   _IRAMHEAP_BASE =.;
   。 += 0x2000;     
   _IRAMHEAP_END =.;             
 }> SIRAM、ALIGN (0x10)

非常感谢!

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

    有关链接器命令文件的介绍、请参阅文章 链接器命令文件入门

    关于...

    [引用 user="Jason Liu4"]。stack  {} > IRAM、fill=00c0ffeeh、align (0x10)

    这会形成一个名为.stack 的输出段。  它由所有也称为.stack 的输入段组成。  在本例中、(几乎肯定的)只有一个名为.stack 的输入段。  它被分配给名为 IRAM 的存储器范围。  由于 ALIGN (0x10)在 IRAM 中选择的地址是0x10的偶数倍。  通常、此段未初始化。  但是由于 fill=00c0ffeh、它是一个初始化段、其中每个32位宽的存储器位置都包含值0x00c0ffee。  通常、这样做是为了查看应用程序在运行时使用的堆栈大小。

    关于...

    [引用 USER="Jason Liu4"]。IRAM_Heap:fill=00c0ffeeh{
       _IRAMHEAP_BASE =.;
       。 += 0x2000;     
       _IRAMHEAP_END =.;             
     }> SIRAM、align (0x10)[/quot]

    总体效果是创建一个名为 IRAM_Heap 的已初始化输出段、该输出段用0x00c0ffee 填充。  详细信息...

    这会形成一个名为 IRAM_Heap 的输出段。  它由所有也称为 IRAM_Heap 的输入段组成。  但是、没有具有该名称的输入段。  。 += 0x2000表示在输出段中创建从该点开始的多个字节的空洞。  在本例中、该点是该段的开头。  它被分配给 SIRAM 存储器范围。  align (0x10) fill=00c0ffeh 的工作方式与.stack 相同。  两条赋值语句将输出段中该位置的地址分配给这些符号。  在这种情况下、这些符号捕获段的起始地址和结束地址。   

    谢谢、此致、

    乔治

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

    尊敬的乔治

    非常感谢您的帮助!
    阅读完您的答复后、我了解了有关链接器命令文件的更多概念。
    打扰一下、我是否可以要求更多详细信息? 预期在 ALIGN (0x10)和 Fill 上


    关于 ALIGN (0x10):
    在什么情况下我们应该使用 align (...)、它是否用于特定用途?
    如果原始链接器命令文件包含 align (0x10)、我是否可以将其删除? 如果我删除它而不考虑详细信息、会发生什么情况?

    关于 fill=00c0ffeh、您说过它是一个初始化段、其中每个32位宽内存位置都包含值0x00c0ffee。
    我想我没有抓住它、请您多解释一下? 您是不是说每个0xffffffff 字节的内存长度都包含值0x00c0ffee?
    您说:“通常,这样做是为了查看应用程序在运行时使用的堆栈。”,我知道吗?
    我是否可以使用 fill =…… 检查 Wheter 堆栈溢出是否发生? 同样、如果我删除它而不考虑详细信息、会发生什么情况?

    非常感谢您的友好帮助!

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

    [引用 user="Jason Liu4"]在哪种情况下,我们应该使用 align (...),这是出于某些目的吗?

    对齐通常与 CPU 的某些要求相关。  从存储器读取的某些指令可能要求地址与特定边界对齐。  或者、可能需要将函数的开头与某个边界对齐。  或其他类似的东西。

    [引用 user="Jason Liu4"]如果原始链接器命令文件包含 align (0x10)、我是否可以将其删除?

    您需要了解为什么需要对齐、以及这种情况是否仍然适用于您的系统。   

    [引用用户="Jason Liu4"]如果删除它而不考虑详细信息,会发生什么情况?

    系统在运行时可能会失败。  此类问题通常很难诊断。

    [引用 USER="Jason Liu4"]您是不是说每个0xffffffff 字节内存长度都包含值0x00c0ffee?

    是的

    [引用 user="Jason Liu4"]您说:"通常,这样做是为了了解应用程序在运行时使用的堆栈大小。",我知道吗?

    在调试器控制下运行代码时、打开堆栈内存中的视图。  请参阅显示0x00c0ffee 的停止位置。   

    注意填充堆栈只是一种调试技术。   不要在最终的生产构建中执行它。

    谢谢、此致、

    乔治

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

    尊敬的乔治

    非常感谢。

    你的答复解决了我的问题。 我现在明白了。

    感谢您的大力帮助!  谢谢!

    此致、

    Jason