当中断占用太多CPU时间时,ARM检测

时间:2018-10-24 15:31:30

标签: c assembly arm interrupt bare-metal

我在裸机ARM C代码中有一个中断,每秒发生几次,该中断需要执行大量计算。 我希望能够检测出这些计算是否花费了太多的CPU时间(当下一次发生时,当前中断尚未结束)。

我已经尝试过这种算法,但是它不起作用:

obj = 42
print(type(obj) is int)

您知道为什么它不起作用,以及我可以使用哪种更好的策略?在ARM C / assembly中有实现它的特定方法吗?

EDIT:工作负载是用户可配置的,因此它的目标是在处理量过多时发出警报,而不是崩溃或创建错误的结果。当负载过高时,中断将返回而不是处理事情,因此它可以保持中断的节奏,而不会累积越来越多的延迟

1 个答案:

答案 0 :(得分:0)

一种方法是测量完成中断处理与开始后续中断之间的时间。这意味着您无需尝试检测“过载”情况,而是可以衡量出接近极限的程度。

如果您有一个空闲线程,则也可以尝试在该线程中(相对于计时器)计算进度,这意味着您可以避免在异常代码中添加任何开销。在这里,只有在有空闲周期进行测量时,您才可以测量空闲时间。