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.

[参考译文] AM6442:Profinet 示例应用 — OSAL — 任务通知延迟

Guru**** 2696755 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1595209/am6442-profinet-sample-application---osal---task-notification-delay

器件型号: AM6442
主题: SysConfig 中讨论的其他器件

您好:

我尝试使用 GP 计时器比较匹配 ISR 回调每 1ms 触发一次先前创建的高优先级 (OSAL_TASK_Prio_30) 任务。  

void 回调(GPTIMER_Handle 句柄)

  //OSAL_EVT_SET (l_pTaskEvent);

  basetype_t xHigherPriorityTaskWoken = pdFALSE;
  vTaskNotifyGiveFromISR (gTaskHdl、&xHigherPriorityTaskWoken);
  portYIELD_FROM_ISR (xHigherPriorityTaskWoken);

  //OSAL_postSignal (l_pTaskSignal);
}

仅在 Profinet 采样应用中、任务触发有时会延迟 500us 至 600us。 我已经在简单的 FreeRTOS 应用中测试了相同的方法、任务激活延迟通知不到 10us。

此任务具有最高优先级。 我不知道哪个任务/ISR 导致此任务激活中出现延迟。

请提供帮助。

谢谢你。

此致、
Upendar Sama.

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

    您好:

    我又提出了一个意见。  

    上述任务触发延迟仅在 PLC - IO 器件通信处于活动状态时发生。 那么如何控制 PRU -> R5 ISR 优先级的优先级呢?

    此致、
    Upendar Sama.

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

    尊敬的 Upendar:

    目前、我们不提供用于控制任务优先级的 API、而是对其进行了微调、以便为我们的平台提供最佳性能。 但是、如果您在 Code Composer Studio 上查看工程的运行时对象视图、您应该会发现 PROFINET 协议栈 的任务优先级的优先级 小于 30。  
    我将尝试用高优先级任务来复制您的情景、并就此问题采取后续行动。

    谢谢你。
    此致、
    Kamil

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

    尊敬的 Kamil:

    感谢您的答复。

    我只想使用硬件计时器创建一个 1ms 或 500us 任务。 请尝试在有和没有 PLC 与 IO 器件通信的情况下重现此问题。

    此致、
    Upendar Sama.

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

    尊敬的 Upendar:

    我尝试快速生成一个类似的场景、并使用  OSAL_EVT 通过 ISR 回调触发高优先级任务。 我最初没有观察到任务性能出现任何延迟(我正在切换 GPIO PIN 来测量它)。 我将尝试 改用 vTaskNotifyGiveFromISR、然后返回给您。
    同时、请分享您身边正在执行的任务及其优先事项的列表? 您可以从 Code Composer Studio 上的运行时对象视图获取此信息。

    谢谢你。
    此致、
    Kamil

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

    尊敬的 Kamil:

    有意思。 我只创建了很少的其他任务、所有任务的优先级都小于 30。 为了确保 PLC 中的 IO Cylce 更新时间是多少? 我正在使用 1ms。

    此致、
    Upendar

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

    尊敬的 Upendar:

    我还使用了 1ms 周期时间、我同时使用 RT 和 IRT 进行了尝试。
    1.也许您可以尝试暂时禁用任务,看看这是否会影响性能?
    2.您的 SysConfig 上 GPTIMER 的中断优先级是多少?
    3.高优先级任务堆栈是否存储在缓存内存区域中?

    谢谢。
    此致、
    Kamil

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

    尊敬的 Kamil:

    1.我可以尝试,但我不乐观。 我只在与 PLC 建立链路后才观察到延迟的任务激活 我断开了电缆、并检查了这一点。  

    2.我把它设为 4。 我认为这可能是原因、将所有其他 ISR 优先级更改为 5 并进行了检查。 但性能没有变化。

    3.是的。  

    您是否可以共享您的项目? 我使用的是 Ind Comm 11_00_08。  

    此致、
    Upendar

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

    尊敬的 Upendar:

    当然!
    但是、为了轻松构建 工程、我建议您安装我们的最新 SDK (2025.00.00.08)、并在 MCU+ SDK 和 Code Composer Studio 中安装相应的 SDK。 然后、您可以将我们的演示中提供的三个默认文件 (main.c、 pn_app_iod_data.c 和 example.syscfg) 替换为以下链接下提供的文件。

    文件: tidrive.ext.ti.com/.../ac375810-6783-4989-bbb6-df64fbb73577
    访问代码: `9pq2zrF

    或者、您可以查看文件(差异相当小)并在项目中手动集成更改。

    此致、
    Kamil

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

    尊敬的 Upendar:

    仅供参考,我还使用 xTaskNotifyFromISR () 获得了同样的高精度。
    希望 我这边有足够的意见 可以继续前进。  

    谢谢你。
    此致、
    Kamil

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

    尊敬的 Kamil:

    谢谢你。

    我使用未经修改的 Profinet 示例应用进行测试。 我也观察到这一个也有同样的行为。 但我没有使用最新的 SDK。 我不这样做会改变此行为。

    我附上了 GPIO 输出的屏幕截图。 第一个是来自高优先级任务、第二个是来自 GP 计时器回调。  

    在 PLC 工程中、TI IO 器件使用 2ms 作为默认的 IO 周期时间。 当我将其更改为 1ms 时、出现问题。 请重新检查循环时间。


    我想检查运行时对象视图是否对调试有用、但当我为 Profinet 工程启动它时、我只能看到“Monitor"。“。 没有操作系统内核模块。 如何启用它们?

    此致、
    Upendar Sama.

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

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

    尊敬的 Upendar:

    我确认在 IO 器件上配置 1ms 周期时间、但仍然没有发现问题。

    使用 ROV 应该是直接的。 运行应用后、只需打开 ROV 窗口、将模块名称设置为“freertos",“,将、将视图名称设置为“Task instances“、暂停正在运行的程序、等待一段时间、直到 CCS 处理数据并列出任务。  
    如果看不到我提到的选项、请共享您的 CCS 版本和 syscfg_c.ROV.xs 文件(该文件应该直接在工程的工作区内)。 使用 TI 网站上提供的最新 CCS 也是有意义的。

    根据您分享的情况、似乎不需要的延迟不是每个周期都会发生、也不是周期性的。 这可能是我在示波器上看不到它的原因。 我也在 AM243 上运行了测试(应类似于 AM64)、但 我也会在自己这边验证这一点。

    谢谢你。
    此致、
    Kamil

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

    尊敬的 Upendar:

    我试图运行我昨天在 AM64 上与你分享的程序,这是可以的。 您是否会共享 ROV 输出? 您是否检查了您一侧的 CPU 负载? 如果您使用我们的演示、应远低于 10%。

    谢谢你。
    此致、
    Kamil

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

    尊敬的 Kamil:

    感谢您的持续支持。

    我在未知状态下附加了 ROV 任务视图和波形的屏幕截图。

    真正识别未知延迟的一个思路是测量任务函数内每个任务触发器之间的时间。  

    此致、
    Upendar Sama.  

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

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

    尊敬的 Upendar:

    请查看下面的示波器输出。 信号边沿之间的延迟远小于在您一侧测量的值。  由于您使用的是我提供的相同默认示例、我建议您使用最新的 SDK。 根据一些内部讨论、我们怀疑在最新版本中解决的 MCU+ SDK 错误可能是您看到该行为的原因。

    您会尝试安装 ind_comms_SDK 版本 2025_00_08 吗? 安装程序将要求自动触发  MCU_PLUS_SDK 版本 11_01_00_17 的安装、该安装程序应该会修复我们需要的问题。



    此致、
    Kamil

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

    尊敬的 Kamil:

    好的。 我会尝试使用最新的 SDK 并返回给您。  

    谢谢你。

    此致、
    Upendar

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

    尊敬的 Kamil:

    我使用了最新的 SDK、结果更好。 在少数情况下、我发现了一些异常、但不像之前的长时间延迟。 我无法使用新的 SDK 测试主应用程序、但需要进行额外的工作。 所以、我现在将此标记为“已解决“。 如果我发现更多问题、我将创建一个新 TT。  

    感谢您的支持。

    此致、
    Upendar Sama.