c - 下面的操作是什么意思?

标签 c embedded microcontroller nxp-microcontroller

我不明白嵌入式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/

相关文章:

c - “如何从C中的文件中查找2D数组中的最大值”

c# - 将 uint 从 c 移植到 c#

c - 读取 ELF 二进制文件的 plt 部分并打印函数虚拟地址

operating-system - 使用抢占式内核时的信号量

embedded - 我的CPU不支持未对齐的内存访问是什么意思?

c - 使用 while 循环的印度算法

c - 使用 PIC18 将数据保存到外部 EEPROM

c - 我怎样才能在pic 18f2550上运行程序

gcc - 一个人如何颠倒 "int"值的低 8 位的顺序并保持高 8 位不变?

c - AVR 引脚变化中断不可预测地触发