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.

[参考译文] AM2634:使用 FreeRTOS 时中断高延迟

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1413350/am2634-interrupt-high-latency-when-used-freertos

器件型号:AM2634

工具与软件:

您好、专家级~
使用 RTOS 时、RTOS 的 SVC 中断(用于任务切换的 portYIELD 触发器)会关闭 IRQ 中断、从而使 PWM 中断无法正确及时响应、导致控制中断延迟较高、这对于逆变器控制是不可接受的。
1.是否可以将 cortex-R5的 SVC 优先级配置为低于 IRQ、以确保低 PWM 中断延迟
或者、能够使用 IRQ 的中断之一来进行任务切换、而不是使用 SVC。
2.在哪里可以找到关于0xe000ed04中断控制寄存器的详细信息?
谢谢!

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

    第一张图片是错误的。 它应该是这张图片

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

    我之前发现过同样的问题、这对于逆变器控制非常重要。

    我建议用两种方法来解决这个问题。 1.启用 Fiq 以支持中断嵌套、可由高优先级 Fiq 中断。 2.嵌套 SVC 中断支持,并可通过 IRQ 和 FIQ 中断。

    e2e.ti.com/.../am2434-r5f-interrupt-handling-interrupt-nesting

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

    您好!

    让我来看看这个问题、给您回过来。

    此致、
    Shaunak

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

    您好、Expert ~
    我曾尝试在不使用 SWI 的情况下切换任务、但测试表明延迟仍然很重要。 同时、我还在没有 LWIP 的 FreeRTOS 演示中测试了 PWM 延迟、测试结果表明延迟小于2us。
    我继续搜索原因、现在我推测 PWM 控制延迟过大的原因是否是 CPSW 中的 CPDMA 中断造成的、因为在 Cpsw_dmaTxIsr、Cpsw_dmaRxIsr 和其他地方禁用了全局中断、这可能会导致 PWM 中断延迟、如图1所示。 因此、电机控制环路无法正常运行。
    此外、我测试了高延迟的频率、发现在固定的60ms 内发生了 PWM 高延迟、如图2所示。 TCP 球型摄像机中是否有一次修复60ms 的操作?
    希望得到您的帮助~
    谢谢!

    此致、
    Yuancheng

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

    尊敬的 Yuancheng
     我们最近发现 CPSW 统计溢出(Misc)中断中存在一个问题、该问题会在 ISR 例程中执行大型代码并阻止中断。 周期性发生取决于数据速率。

    您是否可以尝试禁用 CPSW 统计信息并重新运行测试。


    请执行以下更改以禁用 CPSW 的统计信息模块。


    初始文本文件 mcu_plus_sdk/source/networking/enet/core/ocl/cpsw_stats.c: src


    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int32_t CpswStats_open(EnetMod_Handle hMod,
    Enet_Type enetType,
    uint32_t instId,
    const void *cfg,
    uint32_t cfgSize)
    {
    ...
    /* Enable statistics on all applicable ports */
    - portStat.p0StatEnable = true;
    + portStat.p0StatEnable = false;
    if (enetType == ENET_CPSW_9G)
    {
    - portStat.p1StatEnable = true;
    - portStat.p2StatEnable = true;
    - portStat.p3StatEnable = true;
    - portStat.p4StatEnable = true;
    - portStat.p5StatEnable = true;
    - portStat.p6StatEnable = true;
    - portStat.p7StatEnable = true;
    - portStat.p8StatEnable = true;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    此致、
    Pradeep

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

    嗨 Pradeep~

    我根据补丁更改了代码、并重新编译了 eth 库、最终测试结果与之前基本相同。
    我最新的测试表明、高延迟每60ms 发生一次、我上传不同速率的数据、而当数据速率加倍时、高延迟每30ms 发生一次。
    此外、我最新的测试发现、调用 netconn_write 来发送 TCP 时、总是会出现高延迟。 使用 Wireshark 捕获数据包 (如下图所示)、可以发现发送 TCP 数据时会出现高延迟。

    因此、Cpsw_dmaTxIsr 中的 EnetOsal_disableAllIntr 有可能影响 PWM 中断的执行? 或其他一些可能的原因?
    此外、是否有任何方式可以快速与您沟通、以便快速解决问题~
    谢谢!

    此致、
    Yuancheng

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

    你好,请看看我的答复,谢谢你~

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

    您好!

    几个问题可以帮助我更好地理解问题。

    问题1。 您能否共享 Rx 和 Tx 任务的以太网数据速率(数据包速率)

    问题2: 我们已经在 lwip-if 层中为轮询、Rx、Tx 等运行了一些任务 除此之外、应用将有一些用于发送数据的任务。 您可能也在应用程序中为 PWM 创建了任务。 您能否分享已创建的任务列表及其优先级。

    问题3。 当您测量 PWM 中断延迟时、它的具体测量来源是哪里? 是来自 PWM ISR 上下文、还是这将创建另一个任务、您需要在该任务处对其进行测量。

    问题4。 您是否在应用程序中或任何 Busy while 循环中创建了任何关键段或互斥体?

    系统方框图可以帮助我更好地了解架构、以便找出问题的根本原因、从而增加 PWM 中断延迟

    从很高的层面来说、由于关键段中的某种阻塞、这似乎是个问题。   

    此致、
    Shaunak

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

    很高兴见到你~
    Tx 情况可从上图大致看出、平均速度为1Mb/s RX 速率约为5B/s、主要是检测信号数据包。
    2、我还为输出传输创建了 TX 和 RX 两个任务。 该任务的优先级与该任务中的 Tcp_Server 3842a 的优先级相同。
    3.在进入 ePWM 中断时通过读取 ePWM 的计数寄存器获得中断延迟、因为我使用 ePWM 的计数0来触发中断。
    4.我在 eth 的 TCP 服务器演示中仅发送了1Mb/s 的数据并启用了 PWM 零中断、并且没有其他关键区域资源和其他互斥量或者 while。
    请查看我之前的答案、我怀疑 eth 的 TX 具有关闭 CPU 的整个中断的操作、该操作会导致该问题。

    此致、
    yauncheng

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

    我认为这个问题的本质是由 ETH 库或接口质量差造成的,而更改 ETH 库可能需要 ETH 团队这样做。
    我建议的另一种解决方案是参考 ThreadX 使 CPU 能够支持 Fiq 嵌套、并且高度实时的任务在 Fiq 中执行。