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.

[参考译文] CCSTUDIO-THEIA:F29:在银行模式 2 下从 CPU1 访问 FRI-2 中的常量时、软件不工作

Guru**** 2773965 points

Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1615970/ccstudio-theia-f29-software-not-working-when-accessing-a-constant-in-fri-2-from-cpu1-in-bankmode-2

部件号:CCSTUDIO-THEIA
Thread 中讨论的其他器件: F29H85X-UNIFLASH、SOM

您好:

我有一个软件仅在 CPU1 中运行(CPU2 用作锁步、CPU3 未启动)、并将 bankmode 设置为 2、并根据请求访问位于 FRI-1 中的常量。

该软件在电路板 SOM EVM 上运行良好。

现在、我唯一做的修改是在 FRI-2 中移动常量。

使用调试器、软件可以正常工作、但如果我断开调试器的连接、软件似乎会在 Bootrom 中阻塞 (@ 0x00014EB0 包含指令“B @0x00014EB0、UNC“)、并且不会报告复位。

为什么我有这种行为,如何避免它?

谢谢你

Ronan

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

    您好 Ronan、

    谢谢你。 您能描述一下在 FRI-2 中移动常数时执行的所有步骤吗? 请列出从加载程序到断开调试器的所有步骤、以及您如何看到软件卡在 Bootrom 中。


    此致、
    François μ s。

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

    TI 内部说明:请参阅我在 Thread 跟踪工具套件的注释中指向的客户文件。 谢谢你。

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

    关于常量从 FRI-1 移动到 FRI-2、我刚刚将定义常量的“#pragma CLANG 部分“从“rodata=".rodata.PROJ_ON CONST_LOCAL_CPU1_UNSPECIFICATE""“ CONST_LOCAL_CPU1_UNSPECIFICATE""更“更改为“改为“rodata=".rodata.PROJ_ON CONST_LOCAL_CPU3_UNSPECIFICATE""“ CONST_LOCAL_CPU3_UNSPECIFICATE""(“(您“您可以(您可以参考链接器命令文件中提供的信息)。

    对于另一个问题、使用 UniFlash 下载软件(由于 CCS 出现问题(正在进行其他 POST))、然后在 CCS 中启动调试会话(“main ()“中的软件中断、然后点击“Run")“)并确保软件正常运行。 我中断软件、然后重置电路板。 CPU1 现在被调试器视为正在运行。 我再次中断软件、可以看到它在 0x00014EB0 的无限循环中被阻止

    希望这有助于找到/重现问题。

    Ronan

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

    尊敬的 Ronan:

    感谢您对您的问题有进一步的见解。 您能否确认 EVM 中当前配置的引导模式? 是等待引导还是闪存引导?

    然后重置主板

    我假设您按下 EVM 上的 XRSn 按钮。 还是通过 CCS 发出 CPU 复位命令?

    我再次破坏该软件、可以看到它在 0x00014EB
    的无限循环中被阻止。

    是否在 ESM/错误聚合器中看到记录的任何错误? 有关如何在 CCS 中运行脚本的步骤、请参阅 F29x 错误处理和调试指南的第 4.3 节和 5.2 节。 只需片刻即可运行这些错误处理脚本并在 CCS 的 GEL 输出视图中查看输出。  

    此致、

    Marlyn

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

    您好、Marlyn、

    该电路板配置为闪存引导模式 (S1 = 1/1)。

    我通过 按下 EVM 上的 XRSn 按钮来复位电路板。

    关于 EA 和 ESM 错误:

    1/关闭/打开电路板、然后开始调试会话(在“main ()“处中断软件)

    2/无 EA 和 ESM 错误

    3/单击继续以启动软件=>软件工作

    4/ break =>无 EA 错误、以下事件在 CPU1 和 SYS 中挂起: ESM_EVENT_EPWMXBAR2/3/8 和 ESM_EVENT_OUTPUTXBAR3/4/16、但这些事件都不启用

    5/清除 CPU1 和 SYS 的 ESM 事件、仅 保留 ESM_EVENT_OUTPUTXBAR16

    6/通过在运行状态下按下按钮=> CPU1 来复位 EVM

    7/在无限循环中以 0x00014EB0 断开 CPU1 =>

    8/ 无 EA 错误、CPU1 和 SYS 中的以下事件处于挂起状态: ESM_EVENT_CPU1RSn 和  ESM_EVENT_OUTPUTXBAR16、但这些事件均不启用

    希望这有助于找出问题的根本原因。

    感谢您的支持。

    Ronan

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

    尊敬的 Ronan:

    感谢您分享有关记录的任何可能错误的更多信息。  遗憾的是、似乎没有任何东西可以说明根据 ESM/EA 信息正在发生的事情。 我将在自己的侧构建工程、以便调试正在发生的情况。 请留出一些时间让工程在我的设置中运行。 一旦我把它建成,我就会往回 ping。  

    此致、

    Marlyn

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

    尊敬的 Ronan:

    我能够在自己这边成功地构建该工程。 我将致力于调试您提到的问题。 请注意、星期一是美国假期、因此我可能要等到第二天才回复。  

    此致、
    Marlyn

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

    尊敬的 Ronan:

    关于将常量从 FRI-1 移动到 FRI-2、我刚刚将“#pragma CLANG 部分“(其中常量是从“rodata=".rodata.PROJ_ON LOCAL_CPU1_QUOTE""“ LOCAL_CPU1_QUOTE""定义“定义的“的)定义的)更改为“rodata=".rodata.Tiva_CONST_LOCAL_CPU3"(“(未“未指定(未指定如何处理链接器命令文件)。

    您在哪个文件中进行此更改? 代码库中有很多对“PROJ_ON CONST_LOCAL_CPU1_UNSPECIFIC“的引用、因此我尝试缩小所需的更改范围以复制您的问题。 如果您能提供一些关于您在哪里进行此更改的确切指导、非常感谢!

    此致、

    Marlyn

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

    尊敬的 Marlyn:

    实际上、您将无法在与我相同的位置进行更改、因为您没有处理更改的工具。

    但是、您可以直接在生成的文件中进行更改。

    因此、如果您在文件“main_MemMap.h"中“中搜索“.rodata.PROJ_ON SEC_CONST_LOCAL_CPU3_UNSPECIFID“、您将找到以下行、该行指定了用于映射在存储体模式 2 下分配给 CPU3 的闪存中的常量的段的名称:

       #pragma CLANG section rodata=“.rodata.PROJ_ON SEC_CONST_LOCAL_CPU3_unspecified“ data=“.data.PROJ_ON CONST_LOCAL_CPU3_unspecified“

    如果  在此行中将“CPU3"替换“替换为“CPU1"(“(2 次)、它会将常量映射到分配给 CPU1 的闪存。

    通常、这应该起作用。

    谢谢你

    Ronan

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

    尊敬的 Ronan:

    正常情况下、此方法应该起作用。

    感谢您的澄清。 在这两种情况下(使用工程中共享的原始代码,并且在更改上面的行后)、我会看到器件在复位时进入等待引导状态。 如果您能帮助确认通过上面的更改、代码应正常/正确运行、我将进一步调查为什么会出现这种情况、但如果您能帮助确认这一点、我将不胜感激。  

    此致、

    Marlyn

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

    尊敬的 Marlyn:

    我的错:我给了你一个软件包,在其中我做了额外的修改来启动 CPU3 使带有常量的代码“在 CPU1“而不是“在 CPU3“不再工作。

    我向 Charlot 先生提供了一个新的软件包、其中我删除了为启动 CPU3 而添加的所有代码。 我对其进行了测试、当将常量分配给专用于 CPU1 的闪存时、它工作正常。

    因此、现在、唯一分配给专用于 CPU3 (bankmode 2) 的闪存的元素是常量“main_ku32CstCpu3"。“。

    要将其分配给专用于 CPU1 的闪存、最简单的方法不是我昨天给您的方法、而是在文件“main_tsk.c"中“中反转以下代码中的注释“#define",“,以、以使用段“SEC_CONST_UNSPECIFICATED",“,而、而不是“SEC_CONST_LOCAL_CPU3_UNSPECIFICATED":“:

    #define MAIN_START_SEC_CONST_LOCAL_CPU3_UNSPECIFIED
    //#define MAIN_START_SEC_CONST_UNSPECIFIED
    #include "MAIN_MemMap.h"
    
    const volatile uint32 MAIN_ku32CstCpu3 = 0x5A335ACC;
    
    #define MAIN_STOP_SEC_CONST_LOCAL_CPU3_UNSPECIFIED
    //#define MAIN_STOP_SEC_CONST_UNSPECIFIED
    #include "MAIN_MemMap.h"
    

    根据我将此常量移动到专用于 CPU1 的闪存时所看到的、但仍有用于启动位于 CPU3 闪存中的 CPU3 的代码、问题不会来自位于专用于 CPU3 的闪存中时对该常量的访问。

    实际上、似乎只要我在闪存中添加专用于 CPU3 的内容、软件就会卡 在 0x00014EB 处的无限循环、除非它开始使用调试器。

    感谢您的支持。

    Ronan

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

    尊敬的 Ronan:

    我为 Charlot 先生提供了一个新的软件包、其中我删除了我为启动 CPU3 添加的所有代码。 我对其进行了测试、当常量分配给专用于 CPU1 的闪存时、它工作正常。

    感谢您的更新。 我 今天下载了新项目,并使用您提到的更改测试了原始版本和版本(注释/取消注释定义),但我看到了在两个用例中相同的行为。 我无法复制所有内容并正常运行(例如,器件在 XRSn 或 POR 时未进入等待引导)。  

    每次有 XRSn 或 POR 时、器件都会进入等待引导 (0x00014EB)。 由于证书中的映像大小不正确、正在进入等待引导。 在 SDK 的多核示例中、如果您参考 CPU1 工程的编译后处理步骤、您将看到用于为其生成证书的二进制文件中删除了“cpu3app"部分“部分。 CPU1 证书只能与 CPU1 的应用程序关联。 提供的多核工程的设置与 F29x SDK 中的多核示例非常不同、但从我可以看到进入等待引导的问题与用于 CPU1 的证书内的映像大小有关。

    此致、

    Marlyn

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

    尊敬的 Marlyn:

    感谢您的最后一个回答、尤其是关于“cpu3app"的“的部分。 我应用了您所说的话、在第一个编译后处理命令中添加了“--remove-section=*CPU3*",“,以便、以便仅基于 CPU1 闪存生成证书。

    您是否确认此修改使软件能够在您身边正常运行?

    这是否意味着没有涵盖 CPU3 闪存的证书?

    我对我提供的软件的更新版本进行了此修改、该版本还包含启动 CPU3、但仅使用 1 个链接器脚本。 为此、我复制了 CPU1 使用的一些启动代码、并对其进行了更新。 一切似乎都很正常。

    但是、我必须进行的修改之一是将 “CODE_START" 中“中的“ENTRY1.PROT || ENTRY2.PROT“替换为我为 CPU3 创建的函数(“CODE_START_CPU3")“)中的“ISR1.PROT || ISR2.PROT“。

    我想这不是正确的行为。 你知道我为什么要这样做吗?

    由于此帖子的最后一部分是与初始主题不同的主题、因此如果您愿意、我可以创建新主题。

    谢谢你

    Ronan

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

    尊敬的 Marlyn:

    在我的最后一篇文章    中、关于“ENTRY1.PROT || ENTRY2.PROT“替换为用于启动 CPU3 的代码中的“ISR1.PROT || ISR2.PROT“、我刚刚在 TI 示例中找到 、实际上 CPU1 启动“CODE_START"(“(使用(使用“ENTRY1.PROT|| ENTRY2.PROT“) 、而 CPU3 启动“RESET_PROT"ISR2.PROT"(“(使用“使用 ISR2.PROT"(使用 ISR2.PROT" ISR2.PROT"“ ISR2.PROT")“)。

    所以我认为这部分现在对我来说已经很清楚了。

    Ronan

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

    尊敬的 Marlyn:

    再次感谢您的支持和与同事的会面。

    关于不允许使用 CCS 下载软件但仍能使用 UniFlash 下载的问题:

    • Alex Wasinger 是处理另一个主题的人(链接)
    • 我们确定用于闪存的 DLL 在 CCS 20.4.0 和 UniFlash 9.4.1 中相同
    • 我安装了 CCS 的 20.4.1 版(我很惊讶地发现 CCS 内部的更新不会更新 CCS 本身,但我想这是为了更新)。
      结果相同(不工作)、但工具中的消息不同(见下文)。
      另外、现在我看到了菜单“Flash Settings“。 在这些选项中、我看到有一个测距功能。 我将尝试使用它来寻找故障区域。


    Ronan

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

    这是非常令人困惑。 在不更改任何内容的情况下、我再次尝试使用 CCS 20.4.1 运行调试器(因此使用 CCS 下载软件)、现在运行正常。

    所以我猜是前一篇文章中提供的错误与初始问题无关。

    谢谢你

    Ronan

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

    尊敬的 Ronan:

    感谢您对此的更新! 我本来预计重新安装 CCS 可以解决此问题、因此很高兴您现在看到一切都正常工作。 我没有充分的理由解释为什么它最初不工作,现在它是,但很高兴它正在工作。 如果您在接下来的几天中看到问题、请告诉我。

    此致、

    Marlyn