工具/软件:
你(们)好
我使用 AM243x 至来进行电机控制 EtherCAT 驱动器。 这是一个硬实时应用、它的主中断应以 32kHz 的速率(每 31.25us)运行。
当我进入 SYNC 0 中断例程时、我会生成一个数字输出。 我发现 EtherCAT sync0 信号与我在 sync0 中断中设置的数字输出之间存在高延迟。 两个信号上升沿之间的差值约为 2us。
您能解释一下这种延迟的原因是什么吗?
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.
工具/软件:
你(们)好
我使用 AM243x 至来进行电机控制 EtherCAT 驱动器。 这是一个硬实时应用、它的主中断应以 32kHz 的速率(每 31.25us)运行。
当我进入 SYNC 0 中断例程时、我会生成一个数字输出。 我发现 EtherCAT sync0 信号与我在 sync0 中断中设置的数字输出之间存在高延迟。 两个信号上升沿之间的差值约为 2us。
您能解释一下这种延迟的原因是什么吗?
您好、
在 800MHz 时、2μs 代表大约 1600 个 CPU 周期、这一数值考虑了:
-上下文保存操作
-矢量表查找
-分支到 ISR 执行
-多中断控制器转换( CPU +系统级)
- FreeRTOS 开销(如果适用)
您可以尝试优化以下参数、并查看~2us 的延迟是否会降低:
中断配置:
-为关键中断配置适当的优先级
-尽量减少可能导致延迟的较高优先级中断
-查看中断控制器设置
2、代码级优化:
-尽量减少关键 ISR 中的栈使用
-尽可能优化上下文保存
-降低 ISR 中的函数调用深度
让我知道即使在优化后、延迟是否一致。
此致、
Aaron
以下文档中的一些建议也将有助于减少中断延迟
尊敬的 Maor:
感谢您的跟进。
关于导致~μ s 2µs 延迟的 FreeRTOS 开销、是的、该延迟的一部分可能来自 RTOS、尤其是在您在 ISR 中调用 FreeRTOS API 时。 这些 FreeRTOS 操作可能非常重要、可能需要数百个周期、具体取决于 CPU 频率和中断嵌套。
一般而言、我指的是、在优化 R5F 代码时、可以减少您观察到的 2 个信号之间的延迟。 务必告诉我、即使在进行上述优化后、2 个信号抽头之间是否存在一致的延迟。
此致、
Aaron