我正在跟踪一段代码,用于在嵌入式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()函数?
谢谢你读这篇文章。
答案 0 :(得分:0)
IIRC save_and_cli
是local_irq_save
它保存本地中断传送的当前状态,然后将其禁用。
函数local_irq_restore
用于恢复local_irq_save