我不明白嵌入式C中的以下操作是什么意思?
NVIC_ICPR |= 1 << (vector_number%32);
从引用手册中,我发现
- vector 号 - 中断服务时存储在堆栈上的值。
- IRQ number — 非核心中断源计数,即 vector 号减去 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 - 下面的操作是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48210578/