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.

[参考译文] RTOS/TMDXIDK5718:在 CCS 中重新加载程序时出现问题

Guru**** 2589300 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/640071/rtos-tmdxidk5718-issues-when-reloading-program-in-ccs

器件型号:TMDXIDK5718
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

你(们)好

我将 SysBIOS V6.46.5.55用于 IDK5718上的 Cortex A15程序。

我在重新启动和/或重新加载程序时遇到困难。
为了确保问题不在我的程序中、我尝试了 TI 示例项目
(Clock_IDK_AM571X_CortexA、来自 CCS 7.3 Resource Explorer Classic)

当我关闭所有内容(IDK 板上的断电、CCS 断开连接)时、我执行以下操作:

-启动目标配置
-连接到目标
-加载程序

调试器在 main()上停止,并且运行程序正常。

当我暂停程序并重新加载程序时(无需修改)。
我在 main 上暂停、但它会崩溃。 插入一些调试代码后、我可以看到这一点
SysBIOS 函数 Clock_create 返回一个 NULL 指针和错误块
消息显示:"Out of memory"(内存不足)。

重新加载程序似乎不会将所有内容重置为默认值。

如上所述、我自己的应用程序有类似的问题、在重新加载后程序崩溃。
但是、在继续之前、我希望能够重新加载一个更简单的程序、例如时钟示例。

如何正确重新加载或重新启动 Cortex A15 SYSBIOS 应用程序?

此致、
Markus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    通常、我们执行此操作的方法是断开 A15内核、从 CCS 执行系统复位、然后重新连接内核、重新加载程序。 如果执行程序重新启动,则需要确保程序在退出前清理资源。

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

    [引用 user="Markus Mueller">如何正确重新加载或重新启动 Cortex A15 SYSBIOSapplication? Cortex-A15的 SYS/BIOS 启动代码尝试使缓存无效。 但是、在 Cortex-A15上、缓存无效指令实际上会执行缓存清理、如果缓存中存在来自之前运行的任何数据、则可能会损坏下载的程序。

    硬复位将在尝试使用 CCS 下载另一个程序之前清除缓存。  调试 Cortex A15 定义了一个从 CCS 应用系统复位的替代过程、而不必按下硬复位按钮。

    [请参阅 由于设计决策或勘误表、ARM Cortex-A15是否将使无效指令视为干净/无效指令? 了解一些背景信息]

    在 https://e2e.ti.com/support/arm/sitara_arm/f/791/p/550429/2015078#2015078中 、我附加了一些修改后的 GEL 脚本、以尝试解决从 CCS 重新加载程序时出现的缓存清理问题。 修改后的 GEL 脚本在 CCS 6.2中经过测试、如果仍在 CCS 7.3中工作、我尚未重新检查

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

    感谢您的参与。 现在、我可以了解发生了什么。

    不是第二次加载程序(这也可能需要一些时间、具体取决于应用程序大小)、是否可以在加载/重新加载应用程序之前通过 GEL 文件执行缓存清理/失效? (可手动执行)

    由于我不熟悉 GEL 文件编程、如何实现(如果完全不熟悉)?

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

    [引用 user="Markus Mueller">无需再次加载程序(这也可能需要一些时间,具体取决于应用程序大小) 加载/重新加载应用程序之前是否可以通过 GEL 文件执行缓存清理/失效?[/quot]要执行缓存清理/失效 GEL 文件、必须重复 SYS/BIOS packages/GNU\Targets\arm\rtsv7a\boot.asm 文件中的"@使 L1D 和 L2缓存无效"逻辑。 如果不进行进一步调查、不确定 GEL 是否可以执行控制寄存器访问以 通过设置/方式使缓存无效。

    此外、GEL 脚本必须使 L1数据高速缓存的512行无效、而 L2高速缓存的65536行无效、这可能比仅下载程序慢一秒钟。

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

    感谢您的回答。

    此致、
    Markus