STM32-我能破坏中断的上下文切换吗



STM32系列具有出色的中断服务,它们为您堆叠了大量额外的寄存器,并通过人工返回加载LR以正确地展开堆栈,同时寻找尾部链接、中止进入等机会。然而。。。。太慢了。我发现(STM32F730Z8200MHz时钟,所有代码,包括ITCM中的处理程序,GNU汇编中的所有内容(,进入中断大约需要120-150ns的开销
我仍在学习这些,习惯了旧的ARM7,在那里你必须自己完成所有的工作,然而,在那些芯片中,如果你有一个最小的处理器,你就不需要堆叠太多。那么,我可以";颠覆";硬件中的上下文切换,然后让它以更高的优先级跳到处理程序,暂停只是为了填充管道,让我负责堆叠需要的东西?我不这么认为,也没有找到实现这一点的方法,但我正在开发一个非常紧凑的时间敏感实时代码,中断切换占用了我所有的时间预算。我正在恢复以低代码、轮询的方式完成这一切,但我讨厌对引脚边缘做出响应时出现的抖动。帮助

不,这是在纯硬件中完成的,是所有"Cortex-M";处理器,而不仅仅是STM32。

200MHz下150ns为30个周期。你可能会更快一点。

一种方法是在每次使用完浮点单元时将其标记为未使用,并设置一个核心标志来告诉它不要保存浮点寄存器。有关详细信息,请参阅ARM应用程序注释298。

您可能尝试的另一种方法是将向量表和中断处理程序代码移动到内部SRAM。STM32有一个闪存加速器,它通过执行顺序指令的预取来避免内部闪存上的大多数等待状态,但异步中断可能不会从中受益。

进入中断大约需要120-150ns的开销。

根本不是事实

它需要60ns,因为它需要12个时钟周期。

最新更新