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.

[参考译文] 编译器/MSP430F47187:如何从编译输出文件中删除这些信息、例如"数字超出范围。 有效范围为-32768 (-0x8000)至65535 (0xFFFF)"

Guru**** 2542940 points
Other Parts Discussed in Thread: MSP430F47187

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/819815/compiler-msp430f47187-how-to-remove-thoes-info-from-compilation-output-file-such-as-number-out-of-range-valid-range-is--32768--0x8000-to-65535-0xffff

器件型号:MSP430F47187

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

尊敬的 TI:

我们使用 IAR for MSP430来编译和生成静态库。 源文件是算法的 c 代码(即实际独立于平台)、只是有点大、但生成的库应该小至30K 字节左右、因为我们为许多其他平台生成了库。  但是、当我们使用 IAR for MSP430生成库时、它会生成近600K 字节的库。 太大了!

我们尝试使用文本编辑等编辑工具打开生成的.R43库、并发现它包含大量以下可读编译信息、如下面所示附加到"real"库中、这是库如此大的原因:

    数字超出范围。 有效范围为-32768 (-0x8000)至65535 (0xFFFF)。
    文件:***** \**** \***** \**.c,行:11126
    来源:调用#?Subroutine123s*****

在生成的.R43库中重复了数百行上述可读信息(仅行号不同除外)、这会导致库太大。 同时,它还提供了一种破解库的可能性,因为它包含两个可读的源代码信息!  实际上、上述编译信息已由 icc430.exe 添加到生成的.R43目标文件中 、并由 xar.exe 保留到.R43库中。

虽然它很大、但如果我们将它添加到 Out 项目中、库没有问题、并且可以正常工作。 也就是说、将生成的文件链接到其他工程中没有问题。

如果我们使用编辑工具从库中删除上述信息的可读性并保留这些信息,则大小将减少到30KB,但库无法链接到我们的库,并且编译会显示库“不是 UBROF 文件”, 这意味着我们不能仅使用编辑工具就从库中删除上述无意义编译信息。

那么、编译选项是如何以及可能是什么、以便我们可以从生成的.R43库中排除这些编译信息?

谢谢!

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

    您的示例消息看起来是部分自动生成的、部分特定的。 第11126行中的代码是什么? 您能在.c 文件中找到字符串(例如、"有效范围为")吗?  

    在我看来,它看起来像一条旨在显示在终端上的 assert()消息,这是可疑的。 我的第一个猜测是 IAR 有一个缺省 assert()宏,它生成了类似的东西,而您的其他平台没有。

    有时、这受布尔符号(如 debug (-DEBUG=0)的控制、但可能值得在 IAR 文档中搜索 Assert 以找出它。

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

    感谢您的回复。

    当然、如果我们可以修复"数字超出范围"的编译警告。 有效范围为"、则生成的文件中不再显示该信息。  但这是一个生成的库、我们无法删除那些在我们链接到项目期间将被取消的代码、因此这些警告将始终出现在这里。

     我不反对编译期间它是否出现在编译窗口中。 但  事实上的问题不是 warninga 的含义( 并且生成的包含这些附加可读警告的库也正常工作) 、而是为什么这些警告将以 可读格式添加到生成的库文件中。  此问题仅在使用 IAR for MSP430时出现、而 IAR for ARM 和 gcc for MSP430除外。  

    当使用 IAR for MSP430时、我想用一种方法将它们从生成的库中删除。

    我想如果我们添加到 icc430.exe、或者 除默认配置外、还有一个编译选项、那么冗余警告将不会添加到生成的库中。 就像我们从编译中删除这些调试信息所做的那样。  如果是、我希望得到它。  我现在找不到它。

    谢谢!

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

    您好!

    600KB 是库文件的大小还是最终代码的大小? 我知道、这些警告消息不会编译到最终代码中。

    但我认为应解决这些警告的根本原因、以消除风险。 您能否发布此警告的详细描述?    

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

    > 第11126行处的代码是什么?  

    --------------------------------------

    这看起来不像是编译器警告;我不能将任何可能触发该警告的 C 代码视为诊断代码。 它们是否与您编译源代码时 IAR 提供的诊断类似?

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

    600KB =生成的.R43库的文件大小。  

      更多的 DELAIS、

    (1) 当我们使用 IAR for MSP430构建一个源代码以获取库时、IAR 将触发以下命令:

    icc430.exe C:\**** \***** \**.c -o C:\**** \***** \Release-F4xx\Obj\-D__MSP430F47187_--char_is_signed --enable_multibytes --doub=32 --lock_R4 --lock_R5 --club --library_module --core=430X --data_model=medium -OH --C89 --segment __data=20-ddata=ding_damodel=16

    并生成一个600KB 以上的交互式.R43文件、其中包含大量重复 的"超出范围的数字"。 有效范围为内部-32768 (-0x8000)至65535 (0xFFFF)"、但终止并发症没有错误。

    (2)然后、IAR woul 触发以下命令、将交互式.R43文件转换 为静态.R43库、因为我们配置 IAR 以生成库

    构建库
    xar.exe C:\**** \***** \Release-F4xx\\Release-F4xx\Obj\***.R43 -o C:\**** \***** \**.c -o c:\**** \***** \Release-F4xx\EXE\***.R43

    生成的 libaray 文件大小约为600KB

    (3)打开与其他工具一起构建的库、我们可以发现、一开始就有一小部分不可读的代码、这是我们使用其他工具构建的真实库代码、之后会出现大量重复可读的"数字超出范围"。 有效范围为-32768 (-0x8000)到65535 (0xFFFF)"、这使得通用的.R43文件太大。

    (4)我们创建了一个测试 IAR 项目、并将生成的600K .R43库添加到项目中、然后构建该项目。 一切都正常、我们可以从库中成功调用模块函数。 我们尝试从测试项目中调用库的几乎所有模块函数、而构建的项目映像仅为100KB 左右、大小几乎与我们使用其他编译(如 gcc)时的大小相同。

    所以,问题是为什么这么多不必要的可读“nber out of range." 添加到 IAR 生成的库中。

    2.当我们使用 untraEdit 打开生成的库时,发现:

       行号0-29: 无法读取的代码、类似于真实的库代码

      第30-7868行: " 号码超出范围..."的可读文本  A

                    (最后一行7868的最后一部分是一些不可读的代码、例如文件结束信息等)

    3. "数字超出范围..."的示例  在生成的库内:

    30: 数字超出范围。 有效范围为-32768 (-0x8000)至65535 (0xFFFF)。
    31: 文件:C:\**** \***** \**.c,行:11373
    32: 来源:呼叫#?Subroutine51s€?[7?^X 澯
    33: 数字超出范围。 有效范围为-32768 (-0x8000)至65535 (0xFFFF)。
    34: 文件: C:\**** \***** \**.c,第11379行
    35: 来源:呼叫#?Subroutine44s€?[^@ L澒

    …………

    谢谢!

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

    向上! )

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

    由于警告消息指示文件中触发警告的代码行、我建议您修复该代码。