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.

[参考译文] CC2652R7:连续编译但没有代码更改会导致不同的.hex 文件。

Guru**** 2595770 points
Other Parts Discussed in Thread: CC2652R7

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1357887/cc2652r7-consecutive-builds-without-code-change-results-in-different-hex-files

器件型号:CC2652R7

您好!  

我注意到、如果我连续构建同一个工程而不更改代码、十六进制文件会完全不同。 它似乎与我当前所在的 CCS v12.7相关、因为我使用 CCS v12.6、这不是问题。 因此、我想知道有一个设置可以切换以解决此问题、或者我是否应该恢复到旧版本。 此外、使用的 SDK 为7_40_00_77。

谢谢。
肯尼斯·托马斯

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

    您好、Kenneth:

    让我检查一下我的团队中的其他人是否注意到了这种行为、我会在3个工作日内回复您。

    谢谢。
    托比

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

    您好、Kenneth:

    我的团队没有注意到这种行为、我们刚刚对 F3 SDK (CC2340)进行了类似的测试、构建两次但没有代码更改(预期)时十六进制文件是相同的。

    是的、我建议恢复使用适合您的版本(CCS 12.6)。

    请注意、根据版本说明( dev.ti.com/.../node )、推荐的 CCS 为" CCS-12.5.0"。

    根据我的经验、发行说明"+1"版本通常可以正常运行(例如 CCS 12.6 == CCS 12.5 +1)。

    谢谢。
    托比

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

    嗨、托比:

    很抱歉花这么长时间响应、但我尝试将其恢复到 CCS v12.6。 我本以为我已经检查过连续的构建是否 生成了不同的十六进制文件、但是我们可能做得不够。 我们还有几个观察结果、1)有时生成不同的 hex 文件可能需要7次、2)更改优化级别似乎有用、但不能解决问题、3) 1)我们项目当前围绕 Project_zero 构建的 project_zero、似乎没有这个相同的问题、4  )需要注意的是、我们的整个项目包括 project_zero 文件是用 C++编写的、5)也是通过连续构建的、我的意思是重新构建项目、6)最后是我们的映射、 out 文件和 bin 文件似乎也有区别。   

    下面是一些可供参考的照片:

    谢谢。
    肯尼斯

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

    您好、Kenneth:

    1)有时生成不同的十六进制文件可能需要7次,2)更改优化级别似乎有用但不能解决问题

    这是一个有趣的观察。 我想我以前没见过它。

    3)我们项目当前构建的 project_zero 似乎没有同样的问题

    感谢您确认这一点。 我们还使用开箱即用的 SDK 进行了测试。

    4) 需要注意的是,我们的 整个项目包括我们的 project_zero 文件是用 C++编写的

    这可能是一个很好的线索... 我想知道是否需要其他东西来启用 C++。  我将研究在示例中添加 C++代码、看看我是否开始注意到您报告的同样问题。

    5)也可以通过连续构建,我的意思是像重建项目[/报价]

    我懂了。

    6)最后,我们的地图、输出 文件和二进制文件似乎也有所不同

    这至少是一个良好的一致性标志——任何导致 hex 文件内容不同的东西都可能导致 map/out/bin 文件的差异。

    我将对此进行调查、并在3个工作日内为您提供最新信息。

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

    我从一位同时研究此问题的团队成员那里获得了这些观察结果。  

    1) 1)"仅供参考、 通过 取消选中      工程 属性 (编译 页面)上的"Enable parallel build"、        可以 修复编译日志中的文件顺序。 但 这 不能 解决  问题。 因此、   链接器可能     也会并行处理一些东西 、 这 并不是 确定性的。

    2)我                  使用 优化 级别 2 ( 而不 是 z)构建了项目21次(这是先前观察到的编译不     一致之前的最大值的3倍)、并且没有不一致之处。    此外、  回到  z 级别 、但 随后 选中 "选择 链接时 优化" (这 使得  构建变得 很 持久)、 也 使构建   保持一致 (运行 21 次)"

    希望这有助于

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

    您好、Kenneth:

    我尝试复制这本书在我的终端,但不能。

    我的使用:

    • CCS 12.6
    • F2 7.40 SDK (CC13xx/CC26xx)
    • 示例: C:\ti_simplelink_cc13xx_cc26xx_sdk_7_40_00_77\examples\rtos\LP_CC2652R7\drivers\empty\freertos\ticlang
    • 重建次数:22
    • 优化级别:Z

    对于 C++方面、我将 empty.c 重命名为 empty.cpp、并添加了一个简单类。

    随附代码:  

    /*
     * Copyright (c) 2015-2019, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /*
     *  ======== empty.c ========
     */
    
    /* For usleep() */
    #include <unistd.h>
    #include <stdint.h>
    #include <stddef.h>
    
    /* Driver Header files */
    #include <ti/drivers/GPIO.h>
    // #include <ti/drivers/I2C.h>
    // #include <ti/drivers/SPI.h>
    // #include <ti/drivers/Watchdog.h>
    
    /* Driver configuration */
    #include "ti_drivers_config.h"
    
    extern "C" void *mainThread(void *arg0);
    
    class MyClass {       // The class
      public:             // Access specifier
        int myNum;        // Attribute (int variable)
    
      void doStuff();
    };
    
    void MyClass::doStuff()
    {
        if (this->myNum != 42)
            while (1);
        else
            this->myNum += 1;
    }
    
    /*
     *  ======== mainThread ========
     */
    void *mainThread(void *arg0)
    {
        /* 1 second delay */
        uint32_t time = 1;
    
        /* Call driver init functions */
        GPIO_init();
        // I2C_init();
        // SPI_init();
        // Watchdog_init();
    
        MyClass myObj;  // Create an object of MyClass
    
        // Access attributes and set values
        myObj.myNum = 15;
    
        myObj.doStuff();
    
        /* Configure the LED pin */
        GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
        /* Turn on user LED */
        GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);
    
    
        while (1)
        {
            sleep(time);
            GPIO_toggle(CONFIG_GPIO_LED_0);
        }
    }
    

    您能否与我分享一个导致您观察到问题的简单项目?

    谢谢。
    托比