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.

[参考译文] TMS320F28P650SH:tiobj2bin 生成的两次.bin 文件与相同的代码不同、但位于不同的位置

Guru**** 2478765 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1462581/tms320f28p650sh-twice-generated-bin-file-by-tiobj2bin-are-not-the-same-of-the-same-code-but-in-different-location

器件型号:TMS320F28P650SH
Thread 中讨论的其他器件:C2000WARE

工具与软件:

  1. 相同的代码、当我复制到其他位置并使用 CCS 编译一次时、生成的.bin 文件在应用部分是不同的、不同的部分会指示代码位置。

我在网络上搜索时、有人说"断言"函数是有效的、我们使用断言函数作为 TI 示例建议的。 是否可以使生成的相同代码生成相同的.bin 文件? 怎么做?

  1. 我们将引导加载程序闪存范围配置为0x80000-0x81FFF、将应用程序闪存范围配置为0x82000- 0xBFFFF。 更新应用程序代码时、不应更改引导加载程序闪存范围。

但我们发现、当我们将应用代码的某个结构元素从0更改为非零时、如果有一个结构元素从0更改为非零、则位于引导加载程序闪存中的一个数据将添加1;如果有2个结构元素从0更改为非零、则添加2。 此数据哺乳期位于 TI 函数"ComputeCntSeedValue"中。 当然、函数"ComputeCntSeedValue"中应用位置的相同地址也更改了。 (因为我们在引导加载程序和应用程序中进行了两次初始化。) 是否正常? 此更改是否会影响引导加载程序代码执行?

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

    我可以解释为什么使用 置为有效 导致生成的代码存在差异。  我无法告诉你解决它的最佳方法。

    请考虑以下示例...

    C:\examples>type subdir\file.c
    #include <assert.h>
    
    int fxn(int input)
    {
       assert(input > 0);
       return -input;
    }
    
    C:\examples>cl2000 --gen_preprocessor_listing C:\examples\subdir\file.c
    
    C:\examples>findstr input file.rl
    Nint fxn(int input)
    N   assert(input > 0);
    X   _assert((input > 0) != 0, "Assertion failed, (" "input > 0" "), file " "C:\\examples\\subdir\\file.c" ", line " "5" "\n");
    N   return -input;

    第一个命令显示的内容 file.c 命令 Subdir .  请注意它是如何使用的 置为有效 宏的命令 assert.h .  第二个命令使用选项构建它  ——gen_preprocessor_listing .  请在 C28x 编译器手册中搜索该选项、了解有关该选项的更多信息。  此处相关的详细信息:

    • 它创建与源文件同名的文件、但文件扩展名更改为 .rl
    • 您可以在宏扩展前后看到一个源代码行

    第三个命令显示中的行 file.rl 特征值 输入 .  线条 N 复制自原始源。  线条 X 宏扩展后显示同一行。  请注意文件的完整路径现在是源代码中的字符串。   

    在您的情况下、您必须构建位于不同目录中的源代码。  因此、每个构建中都有不同的字符串。   

    关于...

    [报价用户 id="638582" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1462581/tms320f28p650sh-twice-generated-bin-file-by-tiobj2bin-are-not-the-same-of-the-same-code-but-in-different-location "]我们将引导加载程序闪存范围配置为0x80000-0x81FFF、应用程序闪存范围配置为0x82000- 0xBFFFF。 更新应用程序代码时、不应更改引导加载程序闪存范围。[/QUOT]

    此函数是否来自 C2000Ware ...

    [报价用户 id="638582" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1462581/tms320f28p650sh-twice-generated-bin-file-by-tiobj2bin-are-not-the-same-of-the-same-code-but-in-different-location ]] TI 函数"ComputeCntSeedValue"[/报价]

    如果不能、TI 会提供哪种封装?

    谢谢。此致、

    -George.

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

    是的、TI 函数 "ComputeCntrSeedValue"是来自 C2000。

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

    您好!

    Unknown 说:
    ]此数据哺乳期位于 TI 函数"ComputeCntSeedValue"中。 当然、函数"ComputeCntSeedValue"中应用位置的相同地址也是更改的。

    您能否详细说明这一点、我 无法完全解决这个问题。

    谢谢

    Aswin