fgb*_*ist 5 arm interrupt interrupt-handling
我最近被问到这个问题。我正在研究ARM架构,并且尝试过研究它,但我觉得我没有得到正确的答案。
我的想法是,关键原因是为了避免干扰正在进行的中断,我们使用设置启用寄存器来启用所有中断,使用清除启用寄存器来禁用所有中断。
这是正确的理由吗?这背后是否有更深层次的解释?有一些文件解释这个设计决策吗?
编辑:抱歉,我正在使用的芯片是 Cortex M4
Car*_*sen 3
虽然我无法说出原始设计中的想法,但我的观察是,这使得确保线程安全变得更容易。
假设只有一个寄存器可用于启用和禁用中断;在寄存器中设置一个位将启用相应的中断,而清除该位将禁用它。
这将是一个读-修改-写操作,容易出现竞争条件,除非软件仔细防范它(例如,通过在访问寄存器之前禁用所有中断,或使用同步原语)。
将此与单独的设置/清除寄存器进行对比,后者根本不需要软件同步。任何线程都可以设置或清除各个位,而不会干扰其他位。
单独的设置/清除寄存器也常用于 GPIO 等,以允许多个线程自由修改 I/O 状态。
归档时间:
10 年 前
查看次数:
991 次
最近记录: