stm32下面怎么实现原子操作(不能被中断打断的操作)。
下面有一段示意的代码,请大家帮忙分析分析。多谢了!
uint32_t data_flag = NO_DATA;
void main()
{
while(1)
{ if(data_flag == NO_DATA) // 判断buf里面是否有数据
{
copy_data_into_buf(); // 拷贝数据
data_flag = DATA_IS_IN_BUF; // 设置有数据的标志 <---- 此处有没有可能被中断?
}
}
}
void isr() // 中断处理程序
{
if(data_flag == DATA_IS_IN_BUF) // 判断buf里面是否有数据
{
transmit_data(); // 发送数据
data_flag = NO_DATA; // 设置没有数据的标志
}
}
上面的代码里面data_flag = DATA_IS_IN_BUF这句话,有没有可能被中断程序打断?
如果能被中断打断的话,会不会出现这样的情况:
-step1. main开始设置data_flag,到了一半的时候发生中断
-step2. 中断处理程序看到标志,就传输数据
-step3. main从中断回来之后,继续设置标志。从而导致transmit_data()被多调用一次。
请教下大家,stm32下有没有保证data_flag = DATA_IS_IN_BUF是原子操作的简单办法?感谢!
|