【发布时间】:2013-11-28 10:37:37
【问题描述】:
我正在 ARM cortex A9 处理器的一个内核上运行裸机应用程序。我的 ISR 很小,我想知道是否可以将 ISR 指令锁定在 L1 缓存中?是否可以?有没有人能解释一下这样做的一些缺点?
问候, 否
【问题讨论】:
标签: arm interrupt-handling cpu-cache isr
我正在 ARM cortex A9 处理器的一个内核上运行裸机应用程序。我的 ISR 很小,我想知道是否可以将 ISR 指令锁定在 L1 缓存中?是否可以?有没有人能解释一下这样做的一些缺点?
问候, 否
【问题讨论】:
标签: arm interrupt-handling cpu-cache isr
Cortex-A9 不支持 L1 缓存锁定(既不支持指令也不支持数据)。
缺点是带走大块缓存(锁定通常在整个缓存路径的粒度上完成)会降低系统中其他所有内容的性能。
更不用说如果你的 ISR 确实很小,而且它被频繁调用,它还是有可能在缓存中。
您期望从这样做中获得什么好处?
【讨论】:
您的情况非常适合快速打断。 (FIQ)
您只需为该特定 ISR 分配最后一个中断号。
虽然其他中断编号只是向量,但最后一个编号直接分支到代码区域,从而节省了一次内存负载和互锁。您可以节省大约三个周期。
此外,i-cache 锁定不如 d-cache 锁定有效。
CA9 无论如何都不支持 L1 缓存锁定(出于某些充分的原因),所以不要打扰。
只需确保 ISR 与高速缓存行对齐即可实现最高效率。 (通常为 32 或 64 字节)
【讨论】:
0x1c ;-)
PC=vector table+0x1c。由于它是表中的最后一个条目,您的完整 FIQ 例程可能会放在这里。即,除了从异常中最终返回之外,没有分支。由于有许多存储寄存器,因此代码通常非常少。