论在中断中的标志变量使用volatile的重要性分析
volatile关键字的学习
背景分析
在使用stm32时,我使用中断的方式发送数据,我使用HAL_UART_Transmit_IT
发送数据,发送后使用send_busy
表示发送忙,由于串口中断发送太快,以至于send_busy=1
忙标志没有写入内存中,中断已经将send_busy=0
;最后的结果就是,我发送2帧数据,只有第一帧发送出去了
理想的正常读写顺序:
- main中读取send_busy的值到cpu寄存器
- main中CPU改写值send_busy=1
- main中将send_busy的值写入到send_busy内存中
- 中断读取send_busy的值到cpu寄存器
- 中断改写值send_busy=0
- 中断将send_busy的值写入到send_busy内存中
- 结果是0
实际的读写顺序
- main中读取send_busy的值到cpu寄存器
- main中CPU改写值send_busy=1
- 中断读取send_busy的值到cpu寄存器
- 中断改写值send_bus