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.

[参考译文] J722SXH01EVM:DRU 使用与 FreeRTOS 不兼容

Guru**** 2457760 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1477968/j722sxh01evm-dru-use-is-not-compatible-with-freertos

器件型号:J722SXH01EVM

工具与软件:

为了便于查看和澄清、请访问 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1432606/j722sxh01evm-issues-getting-tisp-dmautils-to-work-with-freertos/5639152

我们无法在同一 c75应用程序中使用 DRU 和 FreeRTOS。 我创建了一个可以说明这个问题的准系统项目、我已将其附在附件中。

在此工程中、如果入口点设置为 _c_int00_secure、则 DRU 中会出现故障、程序将进入无限循环、绝不返回。

如果入口点设置为_c_int00、则程序会完成、并且 DRU 会正常运行。 但是、FreeRTOS 需要_c_int00_secure 入口点、因此无法与 DRU 一起使用。

据我了解、_c_int00和_c_int00_secure 之间的唯一区别与 MMU 设置有关。 请帮助我们了解为什么会出现此问题以及如何避免此问题。

e2e.ti.com/.../3146.basic_2D00_project.zip

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

    您好、Tyler:

    非常感谢您提供赤骨示例。 我们将在下周初查看并与您联系。

    此致、

    Ming

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

    您好、Tyler:

    我能够基于 ti-processor-sdk-rtos-j722s-evm-10_01_00_04构建您的项目。 我可以重新生成您报告的内容、当使用_c_int00_secure 时、dmaUtils::wait()一直在那里等待。 但是、当我将入口点从_c_int00_secure 更改为_c_int00时、程序会因存储器访问错误而停止。 我出什么问题了、还是因为 PDK 版本不同?

    我想告诉大家的另一点是、您的示例是将 FreeRTOS 与 dmaUtils 一起使用、对吗?

    您是否在裸机上尝试过相同操作? 我认为这对您有用、对吧?

    我将讨论这个问题与软件团队谁制作 dmaUtils 今晚. 希望我们能从他们那里得到一些帮助。

    此致、

    Ming  

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

    尊敬的 Ming:

    我不知道您的行为为什么与我的行为不同。 我已经在与您相同的 SDK 上构建了它、它会卡在  dmaUtils::wait ())、但是如果我将 linker.cmd 文件中的入口点从_c_int00_secure 更改为_c_int00、那么程序会一直运行到完成。 您是否在 UART 上得到了"再见"打印输出? 可能程序 完成会被解释为内存访问错误、我相信我以前在 CCS 中也曾看到过这样的行为。

    我们的示例是不使用 FreeRTOS -我已经确定入口点发生了变化、因为 FreeRTOS 与 DRU 不兼容。 我认为 FreeRTOS 本身不会有任何问题、只要 FreeRTOS 需要安全入口点、安全入口点就会使 DRU 中断。

    这个示例应用是裸机、但我们以前曾尝试使用 FreeRTOS、但现在出现了同样的行为。 此工程是简化的裸机工程、因为我相信它以最简单、最容易调试的方式带来了问题。

    感谢您的帮助、

    Tyler

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

    您好、Tyler:

    将_c_int00_secure 更改为_c_int00时、加载程序时会报告以下错误

    C75X_0:无法读取长度为0x1的第0页上0x6455000a2064656c 上的内存块:(错误-1344 -(0:0:0))寄存器或内存请求由于事务错误而失败。 这可能是从只写寄存器读取、写入只读寄存器或访问未分配的存储器位置的结果。 无需用户操作。 (仿真包12.7.0.00105)
    C75X_0:无法读取长度为0x8的第0页上0xa36320a8处的存储器块:(错误-1351 -(0:0:0))寄存器或存储器请求已超时。 CPU 正在执行一个高优先级中断、这通常是由双页故障引起的。 选择"Force"以强制 CPU 进入允许调试 HPI 处于活动状态的状态。 (仿真包12.7.0.00105)。

    它会进入 main()、但根本无法运行该程序。

    此致、

    Ming

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

    您好、Tyler:

    您是否有在 TDA4AEN EVM 上运行且使用 TISP 的 C7x 的有效 DRU 示例? 如果是、您能将其发送给我吗?

    此致、

    Ming  

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

    您好、Tyler:

    我已经弄清楚了_c_int00_secure 为什么不适用于您的 DRU 示例。

    c_int00_secure -> MmuP_init -> MmuP_setConfig -> OsalCfgClecAccessCtrl (false)。  

    如果您跳过  OsalCfgClecAccessCtrl (false)、则可以使用您的示例。

    我怀疑以下段实际上禁用了 CLEC 事件发送

    cfgClec.secureClaimEnable =仅限 InSecure;
    cfgClec.evtSendEnable = false;
    cfgClec.rtMap = CSL_CLEC_RTMAP_DISABLE;
    cfgClec.extEvtNum = 0u;
    cfgClec.c7xEvtNum = 0u;
    for (i = 1U;i < maxInputs;i++)

      CSL_clecConfigEvent (clecBaseAddr、i、&cfgClec);
    }

    此致、

    Ming

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

    尊敬的 Ming:
    很抱歉、我无法一点回复、但我很高兴看到您的示例可以正常工作。

    我已经确认跳过该线路可完成 DRU 示例。 我将在我们的大型项目中进行尝试、然后报告给大家。

    您知道为什么默认存在此函数调用吗? 我们会通过禁用它来破坏其他东西吗?

    此外、我们是否有办法在不修改和重新编译 SDK 的情况下解决此问题?

    感谢您的帮助!

    -泰勒

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

    您好、Tyler:

      当使用 Hwip 或时、将通过 HwiP_built --> Hwip_configClec --> CSL_clecConfigEvent (cfgClec.evtSendEnable = true)重新启用 CLEC 事件发送  

      使用轮询模式时 hwip_configClec --> CSL_clecConfigEvent (cfgClec.evtSendEnable = true)。

    此致、

    Ming