分享一个经验:原子操作时,不要用寄存器关中断

2020-01-01 17:51发布

比如说,有一个变量,仅在主程序和串口中断中被修改,照理只关串口中断就行了,影响范围小一些,不过经过实测,用下面的写法是不行的:
USART2->CR1 &= ~USART_FLAG_RXNE;
       
USART2->CR1 |= USART_FLAG_RXNE;

关全局中断就行:
__set_PRIMASK(1);

__set_PRIMASK(0);

我推测关寄存器中断的速度不够导致的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。