工具与软件:

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.
工具与软件:
您好、Rudao、
我分析了这个问题、以下是我的观察结果:
1. vTaskSuspendAll()期间的中断处理:
如果在内核执行 vTaskSuspendAll()时发生中断、CPU 将首先处理中断、然后返回到完成 vTaskSuspendAll()。
该 ISR 执行时间可能会给测量带来意外延迟。
您能否确认您的系统中是否出现此情况?
2.内存延迟:
如果您的代码从 DDR 运行、较高的存储器访问延迟会导致执行时间延长。
您能否确认、上述应用程序在 DDR 或 MSRAM 内存上运行?
3.延迟是否会导致问题?
观察到的16–18 µs 执行时间是否会影响应用程序的实时行为?
4.建议的调试步骤:
•在调用 vTaskSuspendAll()之前禁用所有中断、然后再次测量执行时间以排除 ISR 干扰。
•单独分析每个 API (vTaskSuspendAll()、__disable_IRQ()、xTaskResumeAll()以确定哪个函数产生最大延迟。
此致、
Anil。
SuspendAllInterrupts()
/ResumeAllInterrupts()
函数是我自己的实现、旨在为 CAN 任务提供临界区保护。 添加这些函数后、CAN 消息周期始终显示10ms 的延迟、例如、100ms 的周期性消息将变为110ms。 禁用这些功能后、延迟问题消失。 CAN 任务每10ms 运行一次、并且SuspendAllInterrupts()
/ResumeAllInterrupts()
大约每10ms 执行24次、在100ms 内总共执行480次(10 * 24 * 2)。 HwiP_disable()
,我进行了进一步的测试与以下结果:
vTaskSuspendAll
:740ns. HwiP_disableInt
: 1–2µs xTaskResumeAll
: 8–9µs 因此问题已得到解决。 这应该是由于内存延迟造成的。[/QUOT]感谢您的确认。
此致
Ashwani