下面的操作是什么意思?
What is meant by the following operation?
我不明白嵌入式C中的以下操作是什么意思?
NVIC_ICPR |= 1 << (vector_number%32);
从参考手册中,我发现
- 向量号 — 服务中断时存储在堆栈中的值。
- IRQ number — 非核心中断源计数,即向量数减去
16.
但是为什么是模除以32呢?
它基本上是一个包含 32
位的寄存器。
这会删除一组 32
中一个或多个中断的挂起状态。每个位代表来自IRQ0 - IRQ31
(Vector number from 16 - 47)
的一个中断号。
写入 1 将移除挂起状态。写入 0 无效。
重要的一点是你应该像这样使用它
NVIC_ICPR |= 1U << (vector_number%32);
这确保这将是无符号整数算术 - 它使您免于 vector_number=31
时出现的 UB。 (chux 指出了这一点)。
我不明白嵌入式C中的以下操作是什么意思?
NVIC_ICPR |= 1 << (vector_number%32);
从参考手册中,我发现
- 向量号 — 服务中断时存储在堆栈中的值。
- IRQ number — 非核心中断源计数,即向量数减去 16.
但是为什么是模除以32呢?
它基本上是一个包含 32
位的寄存器。
这会删除一组 32
中一个或多个中断的挂起状态。每个位代表来自IRQ0 - IRQ31
(Vector number from 16 - 47)
的一个中断号。
写入 1 将移除挂起状态。写入 0 无效。
重要的一点是你应该像这样使用它
NVIC_ICPR |= 1U << (vector_number%32);
这确保这将是无符号整数算术 - 它使您免于 vector_number=31
时出现的 UB。 (chux 指出了这一点)。