Arm 是否可以将ISR指令锁定到一级缓存?

Arm 是否可以将ISR指令锁定到一级缓存?,arm,interrupt-handling,cpu-cache,isr,Arm,Interrupt Handling,Cpu Cache,Isr,我正在ARM cortex A9处理器的一个核心上运行一个裸机应用程序。我的ISR非常小,我想知道是否可以将我的ISR指令锁定在一级缓存中?可能吗?有人会解释这样做的一些缺点吗 问候,, NCortex-A9不支持一级缓存锁定(既不支持指令也不支持数据) 缺点是带走大块缓存(锁定通常在整个缓存方式的粒度上完成)会降低系统中其他所有内容的性能 更不用说,如果您的ISR确实很小,并且经常调用,那么它很可能在缓存中 您希望从中获得什么好处?您的状况非常适合快速中断。(FIQ) 您只需为该特定ISR分配

我正在ARM cortex A9处理器的一个核心上运行一个裸机应用程序。我的ISR非常小,我想知道是否可以将我的ISR指令锁定在一级缓存中?可能吗?有人会解释这样做的一些缺点吗

问候,,
N

Cortex-A9不支持一级缓存锁定(既不支持指令也不支持数据)

缺点是带走大块缓存(锁定通常在整个缓存方式的粒度上完成)会降低系统中其他所有内容的性能

更不用说,如果您的ISR确实很小,并且经常调用,那么它很可能在缓存中


您希望从中获得什么好处?

您的状况非常适合快速中断。(FIQ)

您只需为该特定ISR分配最后一个中断号

虽然其他中断号只是矢量,但最后一个数字直接分支到代码区,从而节省了一个内存负载和互锁。你可以节省大约三个周期

此外,i-cache锁定不如d-cache锁定有效

CA9无论如何都不支持一级缓存锁定(出于一些好的原因),所以不用麻烦了


只需确保ISR与缓存线对齐即可实现最高效率。(通常为32或64字节)

谢谢您的回答。我的唯一目的是进行实验,了解影响中断延迟抖动的因素。Iam试图优化硬实时应用程序的中断延迟。至于你的第二个论点,我没有在那个内核中做任何事情,它只是处理我的关键中断(可能是我稍后会添加一些后台处理),所以系统其余部分的性能并不重要(因为L1是内核的私有部分)。根据这份文件(第9页第1段),它说这是可能的,因此我想知道。否则在网上搜索时,我只能找到二级缓存的缓存锁定。一些SOC有TCM(紧耦合内存),在那里你可以永久地放置你的ISR代码。它的延迟通常与L1相同或稍好,但通常比L2好得多。我查看了Altera文档,在第9页,它只建议代码应该比L1 icache小,因此它可以一直保持在那里。在第11页上,如果代码大于L1,他们建议将它锁定在L2中。如果我想尝试优化中断延迟以满足硬实时约束,那么我会考虑重新设计SW ARCH。卫国明,“当你把最后一个中断号分配给ISR时,你的意思是什么?”-您的意思是因为FIQ处理程序不需要分支指令,因为它是向量表中的最后一个异常(如asm vector.s中定义的)?。如何确保ISR缓存对齐?。现在关于答案,这如何确保我的例程在缓存中(或者这只是一个假设,因为我没有运行任何重要的东西,除了这个关键中断?).据我所知,FIQ只是一个优先级中断,它通过存储少量reg来抢占IRQ并节省一些时钟周期。在ARM体系结构中,偏移量编码为
0x1c
,因此很难对齐FIQ处理程序;-)老实说,我更像是一个算法优化器,而不是一个系统级程序员。尽管如此,我在中断处理方面可能是错的,因为我只是在报纸上读到这篇文章,而且从未真正实现过它。如果我错了,请纠正我,FIQ是16,对吗?然后它会自动对齐64字节。如果由于任何原因无法将#16分配给ISR,最好在ISR的第一条指令之前放置一个“align”指令。但是,严重依赖ISR调用不是很明智,因为开销可能会严重影响性能。此外,在d-cache中保留某些例程并不重要,因为CA9是非常智能的获取指令。FIQ建议很好,因为它将减少延迟,这可能对OP很重要。ARM向量表是32字节对齐的,当发生FIQ时,
PC=vector table+0x1c
。由于这是表格中的最后一项,您完整的FIQ程序可能会放在这里。也就是说,除了exception的最终返回之外,没有分支。由于存在许多存盘寄存器,因此代码通常非常小。