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.

[参考译文] CCS调试器启动错误的项目

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/605026/ccs-debugger-launches-the-wrong-project

主题中讨论的其他部件:TM4C123EK-TM4C129EXLTM4C129ENCPDTTM4C123GH6PMEK-TM4C123GXLTM4C123AH6PM

我们也遇到了类似的问题。

我们正在使用CCSv7版本7.1 .0.0.0016万 ,并且工作区中有多个项目,它们共享它们的大部分源文件。

进行这些项目的原因是我们正在开发一些带有各种TM4C129和TM4C123部件的电路板,具体取决于每个电路板的功能。 我们还使用多个TI LaunchPad来开发/测试/调试我们的代码部分。 这意味着我们的代码可以通过四种方式运行:

  • EK-TM4C129EXL LaunchPad上的TM4C129ENCPDT
  • TM4C129ENCPDT
  • EK-TM4C123GXL LaunchPad上的TM4C123GH6PM
  • TM4C123AH6PM (注意略有不同的部件号)

它(大部分)是相同的代码。 只有C启动文件和链接程序脚本不同。 项目级别的单个预处理程序定义集告诉我们的代码正在编译哪个电路板,然后在"Configure.h"文件中编译时预处理程序逻辑(许多#ifdef /#endif)设置所有其他影响GPIO映射的定义,等等

为了让事情变得更有趣,我们正在使用TI (ti-CGT-arm_gcc.3.LTS)和16.9 (gcc-arm-none-eabi-4_9-2015q3)进行编译,以便进行比较/测试/分析/便携性。 这意味着我们在每个项目中都有四个构建配置:调试,发布,调试__GNU和发布__GNU。

由于有四个不同的主板和四个构建配置,我们选择创建四个独立的项目,而不是一个具有十六种不同构建配置的复杂项目。

但是我们遇到的问题是,启动调试会话通常会为错误的项目启动调试会话,这就像Janos的情况一样,很可能会消除我们电路板上的魔幻烟雾。

下面是我们正在使用的解决方法:在我们的工作区中,我们一次只允许一个项目"打开"。 当我们切换到另一个板时,我们在Project Explorer中右键单击每个项目,并告诉它关闭项目。 这似乎可以解决该问题,并且到目前为止已使用正确的项目启动了调试器。

我希望这个职位对我有帮助,并且我希望CCS团队能够跟踪并解决这个问题,因为Janos的职位来自CCSv7,5.5 而CCSv7仍然存在这个问题。

软件版本:

  • CCSv7版本7.1 .0.0.0016万
  • Windows 10 x64版本1607 Build 1.4393万.1358</xmt-block>1358
  • Java版本8更新131 Build 1.8 .0_131-B11

如果您需要更多信息,请告知我们。

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

    我将这个问题分成了一个新的主题,因为您发布的另一个主题已经超过3年了,很容易在非常旧的主题中丢失帖子。

    您能否提供有关如何设置项目的更多详细信息? 或者更好的是,简单的可重现测试案例?

    因此,您的四个项目具有多个源文件,这些源文件在所有项目中都是通用的。 这些源文件是否位于某个公共源文件夹中,然后链接到所有项目,还是"添加"到(实际添加到)其中一个项目并链接到其他三个项目? 前者通常是更好的做法,以避免调试过程中出现问题。

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

    感谢您注意到我的帖子,尽管我的帖子是旧线程。

    如我所述,我们正在编写一个软件系统,它可以在多个不同的主板和TM4C变体上执行,包括我们自己的设计以及TI EK-TM4C129EXL和EK-TM4C123GXL LaunchPad。

    这很有效,因为我们几乎所有的代码都可以在不同的硬件配置中移植,而且我们有一个全局Configuration.h包含,它使用编译时条件(#ifdef/#endif)来处理硬件映射。 我们使用TivaWare并调用MAP_函数,以便在可用时使用ROM中的函数,否则将闪存版本链接到我们的代码中。

    因此,我们软件代码的主目录(为了简单起见,我们将其称为“软件”目录)仅包含.c和.h源代码文件,这些源代码文件独立于特定的主板和TM4C变体,这几乎是我们所有的源代码。

    此"Software"目录中唯一的另一个目录是每个主板的一个子目录,因此有一个名为EK-TM4C129EXL的目录,另一个名为EK-TM4C123GXL的目录和我们的主板的目录。

    这些目录中的每个目录都包含一个CCSv7项目,该项目为该特定电路板构建软件。 例如,EK-TM4C123GXL目录包含以下内容:

    • .启动
    • 设置
    • 调试-使用TI工具链为调试构建配置构建文件
    • DEBUG__GNU -使用GCC工具链构建调试构建配置文件
    • 发布-使用TI工具链进行发布构建配置的构建文件
    • release__GNU -使用GCC工具链构建用于发布构建配置的文件
    • TargetConfig
    • ccsproject
    • .cproject
    • 项目
    • tm4c123gh6p.cmd -用于TI工具链的链接器脚本
    • tm4c123gh6p_startup_CCS.c -用于TI工具链的C启动文件
    • tm4c123gh6p.lds - GCC工具链的链接程序脚本
    • tm4c123gh6p_startup_cc_gcc.c - GCC工具链的C启动文件

    EK-TM4C129EXL目录包含其各自电路板的类似内容,依此类推。

    我在这里描述的是单独的CCSv7项目:

    每个文件夹都位于其自己的文件夹中,该文件夹的名称是针对它将在其上运行的主板命名的。

    所有这些文件夹都位于同一父文件夹中

    该父文件夹是所有通用源代码文件所在的位置

    所有这些项目都将显示在项目资源管理器中,因为它们都已导入到工作区中。 workspace文件夹不包含我们的项目。 项目被链接,而不是复制到工作区文件夹。 这是因为我们将项目(而不是工作区)保留在版本控制中,并在单独的工作目录中工作。

    为回答您的问题,该父目录(每个主板的源代码和子目录所在的目录)不会作为链接资源添加到项目中,因为这可能会在CCSv7递归到子目录时引起混淆,因为它会开始查找所有不同的项目。 这是未链接的目录。 而是必须将所有源代码文件作为原始文件的链接添加到每个项目中。 它们是相对于${PROJITY_LOC}变量链接的,该变量的结果类似于.project文件中的<locationURI>parent-1-project_LOC/SourceCodeFile.c</locationURI>。

    该代码在所有主板上使用TI或GCC工具链的所有构建配置中正确编译和运行。 问题在于,启动调试会话似乎在对开发板进行编程之前切换到了错误的项目,除非我们确保在项目资源管理器中“关闭”了所有项目(我们要调试的项目除外)。

    我希望这种描述更加清楚,有助于找出问题所在。

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

    感谢您提供详细信息。 我尝试创建一个简单的项目环境,它与您的环境相同,但到目前为止,由于调试会话打开了错误的项目,因此无法重现该问题。 也许我漏掉了一些触发问题的细微差别。  

    您是否能够共享您的项目(以及 带有通用源文件的"软件"主目录)以帮助我们重现问题? 我想4个项目中,即使有2个项目也应该这样做,如果这足以证明问题所在的话。

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

    感谢您对此进行调查。

    我尝试通过创建包含两个新的"测试"项目的新工作区来重现该问题(到目前为止失败了)。 它基于与我们的实际作品相同的理念和布局,但它是一个仅闪烁板上LED的设计示例。 子目录中的项目适用于EK-TM4C129EXL和EK-TM4C123GXL,因为TI可以访问此类主板。 :-)

    遗憾的是,我(目前)还不能重现此"测试"工作区和项目的问题,但由于我们的实际项目确实发生了这种情况,我同意您的想法,即我们的项目必须有细微差别。

    我认为细微差别可能是这样的:在我们创建了第一个项目并配置了其中的所有项目之后,我们通过复制原始项目创建了其余的每个项目。 我认为我们通过复制和粘贴项目在CCSv7项目资源管理器中制作了一些副本;但我认为我们也使用了版本控制软件(SVN)制作了一些副本。 我需要进一步测试才能确定,但如果项目文件中嵌入了某种UUID/GUID或其他"唯一项目ID",CCS知道在制作副本时如何更新, 那么当我们使用CCS之外的其他方式复制项目时,这肯定会导致问题。 当我尝试通过创建新项目来重新创建方案时,就像您一样,他们没有遇到这个问题。 至少这是我现在的推理,我还没有检验过。

    我将尝试创建一个工作区和项目来重现问题,复制我们的实际工作,然后删除任何不相关的内容... 这将需要一些时间,因为我必须测试它是否真正再现了它!! 我会告诉你我找到了什么。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复和尝试重新创建测试方案。 请您慢慢来,每当您有什么事情要发送给我们时,我们很乐意进行进一步调查。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    I will try to create a workspace and projects to再现此问题,方法是复制我们的实际工作,然后删除任何不相关的内容... 这将需要一些时间,因为我必须测试它是否真正再现了它!! 我会告诉您我找到的内容。[/QUOT]

    我不确定您是否能够创建可重现的方案,但我想告诉您,我计划暂时关闭此线程。 但是,如果您有可重现的测试案例,请随时返回此处发布更新,我们将很高兴重新打开并重新调查此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还没有为您创建一个可重现的场景,但我会说,每隔一段时间,都会发生一些"奇怪"的事情,我永远不能确定这是我做过的事情还是一个错误。 例如,有时工作区中的活动项目会发生更改,有时"清理"对话框中的复选标记与之前的复选标记不同... 但是,由于这些事情发生在繁重的工作中,我在CCS和其他应用程序之间来回切换,我无法确切地告诉你们事件的顺序是什么。

    如果我能想出一些明确的东西,我会告诉你。

    一如既往地感谢您的帮助。