Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ARM中有2个寄存器用于启用/禁用中断,而不是1个?_Arm_Interrupt_Interrupt Handling - Fatal编程技术网

为什么ARM中有2个寄存器用于启用/禁用中断,而不是1个?

为什么ARM中有2个寄存器用于启用/禁用中断,而不是1个?,arm,interrupt,interrupt-handling,Arm,Interrupt,Interrupt Handling,最近有人向我提出了这个问题。我正在研究ARM架构,我也尝试过研究它,但我觉得我没有得到正确的答案 我的想法是,关键原因是为了避免干扰正在进行的中断,我们使用set enable寄存器启用所有中断,使用clear enable寄存器禁用所有中断 这是正确的理由吗?这背后有更深刻的解释吗?是否有文件解释此设计决策 编辑:对不起,我正在使用的芯片是Cortex M4虽然我无法说出原始设计中的想法,但我的观察是,这使得确保线程安全变得更容易 假设只有一个寄存器可用于启用和禁用中断;在寄存器中设置一个位将

最近有人向我提出了这个问题。我正在研究ARM架构,我也尝试过研究它,但我觉得我没有得到正确的答案

我的想法是,关键原因是为了避免干扰正在进行的中断,我们使用set enable寄存器启用所有中断,使用clear enable寄存器禁用所有中断

这是正确的理由吗?这背后有更深刻的解释吗?是否有文件解释此设计决策


编辑:对不起,我正在使用的芯片是Cortex M4

虽然我无法说出原始设计中的想法,但我的观察是,这使得确保线程安全变得更容易

假设只有一个寄存器可用于启用和禁用中断;在寄存器中设置一个位将启用相应的中断,而清除该位将禁用它

这将是一个读-修改-写操作,除非软件小心防范(例如,通过在访问寄存器之前禁用所有中断,或使用同步原语),否则很容易发生错误

与此相比,单独的设置/清除寄存器根本不需要软件同步。任何线程都可以设置或清除单个位,而不会干扰其他位


单独的设置/清除寄存器也常用于GPIO,以允许多个线程自由修改I/O状态。

哪些寄存器,以及哪些体系结构?就A级/遗留体系结构而言,一个寄存器中只有两个位(一个用于禁用每种类型的中断),就是这样。M-class架构有点不同,它也包含了实际的中断控制器本身,但本质上仍然只是PRIMASK。或者在控制CPU是否发生中断与它们是否首先生成之间是否存在一些混淆?