怎么" save_and_cli(flag)"真的有效吗?

时间:2016-11-07 07:01:03

标签: c++ c linux embedded

我正在跟踪一段代码,用于在嵌入式Linux中运行的程序,并遇到了这个问题。我无法找出有用的信息来向我展示它是如何运作的。

这段代码写成:

unsigned char foo(*someaddress){
unsigned long flags = 0; //why use a long?
flags = save_and_cli(); //what is this?
spin_lock_irqsave(&someaddress, flags);//ok, this is a spin lock

...do something...

restore_flags(flags); //release something?
spin_unlock_irqrestore(&someaddress, flags);//release lock
}

这似乎是LONG旗帜'值永远不会改变,什么是save_and_cli()函数?

谢谢你读这篇文章。

1 个答案:

答案 0 :(得分:0)

IIRC save_and_clilocal_irq_save

的“古代”版本

它保存本地中断传送的当前状态,然后将其禁用。

函数local_irq_restore用于恢复local_irq_save

保存的irq状态

Here for reference