您好!
我注意到、如果我连续构建同一个工程而不更改代码、十六进制文件会完全不同。 它似乎与我当前所在的 CCS v12.7相关、因为我使用 CCS v12.6、这不是问题。 因此、我想知道有一个设置可以切换以解决此问题、或者我是否应该恢复到旧版本。 此外、使用的 SDK 为7_40_00_77。
谢谢。
肯尼斯·托马斯
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.
您好、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:
我尝试复制这本书在我的终端,但不能。
我的使用:
对于 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);
}
}
您能否与我分享一个导致您观察到问题的简单项目?
谢谢。
托比