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:在 RTCA/DO-178B 认证软件中使用 Code Composer Studio 版本2.20 RTS 库

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1389652/codecomposer-use-of-code-composer-studio-version-2-20-rts-library-in-rtca-do-178b-certified-software

器件型号:CODECOMPOSER
Thread 中讨论的其他器件:TMS320C6701

工具与软件:

尊敬的先生/女士:

我们目前正在升级使用 Code Composer Studio 版本2.20附带的"rts6701.lib"实时支持库的传统系统的软件。 对于升级、我们仍然使用相同的 Code Composer Studio 版本2.20

使用的处理器是 TMS320C6701 DSP。

系统软件需要通过 RTCA/DO-178B C 级认证

对于 RTCA/DO-178B 认证、必须删除无效的代码或已停用的代码。 我们怀疑 rts6701.lib 库中可能存在多个未使用的函数。

我们的客户 对该库的使用提出了担忧:

1. 我们是否可以从库中删除未使用的功能/代码,或者这种行为是否违反了许可协议?

我已附上许可协议信息以供参考。

e2e.ti.com/.../ccs_5F00_c6000_5F00_2.0_5F00_license.html

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

    我对您的情况不理解。  库是集合函数和数据。  对于这篇文章的其余部分、我假设所讨论的理论库仅包含函数。  但是、我说的关于函数的一切也都是关于数据的。  程序调用库中的所有函数几乎从不会发生这种情况。  通常情况相反。  仅调用库中的少数函数。  这是图书馆性质的基本要素。  出于这个原因,我怀疑这个要求...

    必须删除无效代码或停用代码

    ...不能合理地应用到库。

    谢谢。此致、

    -George.

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

    您好、George:

    感谢您的反馈。

    我同意您的意见 、认为修改*。lib 库文件是不合理的。

    我忘记在我的查询中包含一些详细信息、这些信息可能会让我更清楚地了解为什么我提出了有关修改库的问题:

    包含上述*。lib 库文件的 CCS 文件夹 中还包含库的源代码文本文件。   因此、可通过删除已知的未使用的库函数并重新编译代码来编辑源代码文件。 使用的函数不会被修改。 这是我们目前正在考虑的问题、但不确定 这是否违反了 TI 的许可协议。

    非常感谢

    Izak

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

    要回答您当前的问题...

    我们目前正在考虑这一问题、但不确定这 是否违反了 TI 的许可协议。

    不是。  我知道客户已经修改了编译器 RTS 库附带的启动代码。  在概念层面上、您提议做类似的事情。

    尽管如此、我仍有一些担忧。  关于这一要求...

    必须删除无效代码或停用代码

    忽略中的许多函数和数据、从而考虑链接器 rts6701.lib 已将其删除。  剩下的就是中的对象模块  rts6701.lib 窗口大小。  您是否同意此分析?  这不是所有的考虑,但它是一个很大的部分。  在我继续讨论其他要考虑的部分之前、我需要知道您同意我的看法。

    谢谢。此致、

    -George.

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

    您好、George:

    是、我完全同意您的分析:

    "考虑链接器、忽略中的许多函数和数据  rts6701.lib 已将其删除。  剩下的就是中的对象模块  rts6701.lib  链接器使用的项目。"

    此致 Izak

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

    下一步是考虑您使用的所有文件 rts6701.lib .  这些文件中的大多数只有一个函数。  您的程序必须调用该函数、否则链接器将不会使用库中的该文件。  但是、如果一个文件具有多个函数、该怎么办?  在这种情况下、您必须考虑程序仅调用其中一个函数的可能性。

    我将使用小得多的示例库进行演示。   

    以下是两个文件的源代码。  第一个术语定义了一个函数。

    /* lib1.c */
    void called_from_lib1() {}

    第二个示例定义了两个函数。

    /* lib2.c */
    void called_from_lib2() {}
    void never_called_from_lib2() {}

    这些命令会构建这两个文件、并将它们放入库中。

    % cl6x lib1.c
    % cl6x lib2.c
    % ar6x -r testlib.lib lib1.obj lib2.obj
      ==>  new archive 'testlib.lib'
      ==>  building archive 'testlib.lib'

    为了简化操作、我尽可能依靠默认设置。

    以下是主例程的源代码。  这表示调用库中函数的用户应用代码。

    /* main.c */
    void called_from_lib1(), called_from_lib2();
    
    int main()
    {
        called_from_lib1();
        called_from_lib2();
    
        return 0;
    }

    构建主例程、然后将其链接到一个程序中。

    % cl6x main.c
    % cl6x -z -o test.out -m test.map main.obj testlib.lib -c -l rts6200.lib
    <Linking>

    接下来、我将展示如何分析库中的代码。  您正在从库中查找属于程序一部分但未被调用的任何函数。  在此分析中、我将重点介绍各项功能。  但任何数据也是如此。

    在映射文件中查看从库中引入了哪些文件。  在映射文件中搜索库的名称。  在此简单示例中搜索 testlib.lib .  在您的程序中、搜索 rts6701.lib .  在本例中、您会发现以下代码行。

                      000005e0    00000020     testlib.lib : lib2.obj (.text)
                      00000600    00000020                 : lib1.obj (.text)

    您可以通过这种方式知道链接器 使用这些文件 lib1.obj lib2.obj 的符号 testlib.lib .  接下来、从库中提取这些文件。

    % ar6x -x testlib.lib lib1.obj
    % ar6x -x testlib.lib lib2.obj

    查看中定义的全局符号 lib1.obj .

    % nm6x -g lib1.obj
    00000000 T _called_from_lib1

    它只定义一个全局符号。  由于只有一个、因此已完成该文件的分析。  链接器使用库中的此文件、因为会调用该函数。  我预计链接器使用的大多数文件都会出现这种情况 rts6701.lib .

    查看中定义的全局符号 lib2.obj .

    % nm6x -g lib2.obj
    00000000 T _called_from_lib2
    00000008 T _never_called_from_lib2

    这定义了两个全局函数。  使用此命令查看程序中是否有这两个函数。

    % nm6x -g test.out | findstr called_from_lib2
    000005e0 T _called_from_lib2
    000005e8 T _never_called_from_lib2

    它的输出 nm6x 命令有几行。  我使用它 findstr 此命令用于将输出限制为包含该字符串的行。  此处使用它来使示例简短而简单。  在您的情况下、您可能无法这样做。  此处的重点是演示两个函数都在程序中。

    若要知道程序是否调用这些函数、必须搜索源代码。  这很不方便、但不可避免。  希望在本例中不会出现这样的很多示例。  可能没有任何数字。  但我想让大家知道、如果发生了该函数、它是什么样的。   

    在分析结束时、可以看到中列出的函数列表 rts6701.lib 那些在你的程序中、但从未被调用的函数。  我希望列表是空的。  如果不为空、则时间很短。   

    谢谢。此致、

    -George.