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.

[参考译文] CODECOMPOSER:如何通过命令行嵌入入口点符号?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1324980/codecomposer-how-to-embed-the-entry-point-symbol-through-the-command-line

器件型号:CODECOMPOSER

尊敬的专家:

据我所知、地址0x80000 (我使用的是 TI28377D)包含四个字节的值:"入口点符号"、可 从 .map 文件引用。 例如、符号名称为_c_int00 @ 0x8378A。

在我的工程中、构建的.hex 文件不包含此信息、这会阻止在独立模式下正常启动。

我的问题是:如何通过命令行自动嵌入此符号地址? (我已尝试在十六进制文件中手动添加符号地址、在独立模式下操作是正常的。)

根据参考文献 spru514,我添加了链接选项--rom_model,但入口点符号仍没有嵌入。

以下是我在 Makefile 中使用的部分命令:

-m $(project_name).map -e _c_int00 --rom_model -o $(project_name).$(binary_suffix)

我是否遗漏了任何命令?

谢谢。

C. C、Liu

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

    您好!

    让我来收集更多有关这方面的信息。 "你怎么了?

    谢谢

    阿斯温

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

    您好!

    请注意,当地假日可能会造成回复延迟。

    谢谢!

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

    十六进制文件没有符号概念、包括入口点符号。  下面提供了一种粗略的伪代码方法来描述 hex 文件包含的内容。  它包含一系列记录。  每条记录包含以下信息:

    编码 。  没有一种机制可以表示入口点。   

    谢谢。此致、

    -乔治

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

    您好、George、

    谢谢你的答复,但我仍然感到困惑。

    例如、下面的.hex 文件由 TI 示例代码构建。 第2行指示起始地址(0x80000 - 0x80001)以及应用起点地址(0x82821、即_c_int00、如.map 文件中所示)。

    但是、我自己的代码不会像下面那样显示起始代码(文字为0x80000 - 0x80001)。 这一遗漏导致我的代码无法在独立模式下运行、因为它缺少起始代码地址。

    手动添加带有入口点符号的起始代码地址(如下面的第2行所示)后、代码可以在独立模式下运行。 因此、我认为必须包含起始地址和入口点地址。

    此外、在 TI 的示例代码中、其 makefile 还包含用于嵌入入口点的命令。 在我的项目中整合 TI 的命令后、仍然不会生成起始地址(0x80000 - 0x80001)。

    能否确认我的理解是否不正确? 如果没有、为什么我的.hex 文件不嵌入起始地址?

    非常感谢、

    C. C、Liu

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

    您好!

    例如,下面的.hex 文件是由 TI 示例代码构建的。
    此外,在 TI 的示例代码中,其 makefile 还包含用于嵌入入口点的命令

    您能告诉我您提到的.hex 文件和 makefile 位于何处吗? 我将尝试在我这边看看这些。

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

    您好、Liu、

    我与另一位专家交谈过、我想我知道一种方法应该能够将符号放置在您指定的位置。 在代码中可以做的不是修改编译器选项、而是   为_c_init00符号添加一个#pragma DATA_ALIGN 和#pragma DATA_SECTION 、以分配给您指定的特定内存段。 然后、您需要修改链接器命令文件、为该符号添加一个额外段、并将其放置在存储器中。 只要能在全局范围内访问_c_init00变量、此函数就应该起作用(您可能必须手动修改某些文件才能实现此操作):

    C 源文件示例:

    #pragma DATA_ALIGN(_c_init00, 2)
    #pragma DATA_SECTION(_c_init00, ".cust_sect")

    链接器文件示例:

    SECTIONS
    {
       codestart        : > BEGIN
       .text            : >> RAMD0 | RAMD1 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3
       .cinit           : > RAMM0
       .switch          : > RAMM0
       .reset           : > RESET, TYPE = DSECT /* not used, */
       .cust_sect		: > FLASH0
       ...

    您可以查看 libraries\communications\Ethernet\third_party\lwip\examples\enet_lwip\cm 中的示例、其中包含 startup_ccs.c 和 2838x_flash_lnk_cm_lwip.cmd 文件。

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

    Amir、您好!

    感谢您的答复、但我的担忧与入口点符号配置无关、因为可以在.map 文件中找到它。

    我唯一关心的是如何观察起始地址0x80000包含映射文件中生成的入口点符号的2个字、从而确保前导代码可以在独立模式下正常运行。

    重新跟踪 TI 示例代码时、我发现了一个应定义代码起点的汇编文件(例如 F2837xD_CodeStartBranch.asm)、如下所示。

    我的项目的缺点是我忽略了配置".sect "codestart"。 添加此内容后、我的.hex 文件现在包含应用起点地址(_c_int00 @0x838BD)、如.map 文件中所示(请查看下面的屏幕截图)。

    我所做的是将以下汇编代码添加到我的.c 文件中。 现在、代码可以在独立模式下正常运行。

    此致、

    C. C、Liu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的项目中的缺陷是我忽略了配置".sect "codestart"。 添加此项后、我的.hex 文件现在包含.map 文件中所示的入口点地址(_c_int00 @0x838BD)(请参阅下面的屏幕截图)。

    我所做的是将以下汇编代码添加到我的.c 文件中。 现在、代码可以在独立模式下正常运行。

    [/报价]

    那么、您的问题是已经解决了、还是仍然有问题?

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

    没有其他问题了。 我最后一次回复是和大家分享。