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.

[参考译文] RTOS/AM3358:SYSBIOS 中断处理速度

Guru**** 2952510 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/675210/rtos-am3358-sysbios-interrupt-handling-speed

器件型号:AM3358
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

香榭丽舍

我们正在调试客户在 ARM A8内核上的问题、

SYSBIOS:6.52.0.12

编译器:GNU 6.3.1。

代码如下所示:

taskFxn (){

…

ERROR_INIT (&EB);
Timer_Params_init (contTimerParams);

contTimerParams.period = 500;//  

contTimerParams.periodType = Timer_PeriodType_micros;
contTimerParams.arg = 1;

contTimerParams.startMode = Timer_StartMode_Auto;

//delayTimerParams.runMode = Timer_RunMode_OneShot;
contTimerParams.runMode = Timer_RunMode_Continuous;

contTimerHandle = Timer_create (2、timeIsr、&contTimerParams、&EB);

if (contTimerHandle == NULL){
System_abort ("计时器创建失败");
}

客户应用程序代码;  

}

timeIsr 只是一个计数器、不应使用任何周期。 如 ROV 视图中所示、定时器为 HWI。  

当 contTimerParams.period = 500;时,timer_create 之后的客户应用程序代码可正常执行。 如果 contTimerParams.period = 300、则应用程序代码无法运行(例如、设置断点、并且无法命中)。

我们添加了一个 UIA 模块来跟踪 CPU 负载。 当定时器中断间隔为2000us 时、CPU 负载已经~70%。 当定时器中断间隔为1500us 时、CPU 负载为~100%。 进一步缩短中断间隔、CPU 完全处于繁忙状态、无法生成 CPU 负载图。  我认为 UIA 模块本身也需要周期。  

客户真正的用例是、他们每125us 就有一次中断。  

在 SYSBIOS 中、是否有任何配置可让应用程序在快速发生中断时有机会运行?

此致、Eric

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

    Eric、

    客户可能已达到硬件限制。 遗憾的是、A8没有零延迟中断支持。

    我可能会建议将 timerISR 加载到缓存中并锁定它、以帮助降低延迟。 请参阅 A8的 SYSBIOS 缓存 API 参考。

    另一个考虑因素是客户利用硬件计时器外设。 比如使用硬件计时器寄存器来保持计数。 (32.768kHz 时钟、预分频值为4、得到~122us)。 然后、应用程序可以在定时器溢出(~0)时中断、并且它们的应用程序可以在 RAM 中增加一个单独的值。

    Derrick

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

    Derrick、

    感谢您的建议! 我尝试使用 cache_lock 将 ISR 放入超速缓存中,但它没有帮助。 ISR 代码非常小。 关于计时器中断、真正的客户案例是来自连接的外部器件的 GPIO 中断。 它每125us 生成一次中断、A8需要对其进行处理。 我使用计时器中断来模拟 GPIO 中断。 很抱歉、我在早期帖子中没有对此进行解释。 还有其他建议吗?

    此致、Eric

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

    Eric、

    您是否知道客户是否尝试仅对 GPIO 中断事件(即霍尔效应传感器)进行计数?

    AM335x 特有 一个能够对这些事件进行计数的增强型捕捉(eCAP)模块。

    如果 AM335x 需要单独为每个中断提供服务、我担心它们可能需要另一个低功耗 MCU 作为协处理器。

    Derrick