如果代码如下
void test(void)
{
spin_lock_irqsave(&lock1, flag);
...
func1();
...
spin_unlock_irqrestore(&lock1, flag);
}
void func1(void)
{
spin_lock_irqsave(&lock2, flag);
...
spin_unlock_irqrestore(&lock2, flag);
}代码会有什么问题吗?在func1中调用spin_unlock_irqrestore时,是否已启用中断?我想要实现的是test()例程可以在没有任何调度器或中断的情况下执行。非常感谢
发布于 2012-09-25 23:41:00
就我在文档中找到的,而且我还没有完全穷尽我的搜索,flag将保存设置不同标志的位的状态,然后关闭中断,然后恢复它。如果中断已经被第一次调用test关闭,然后你再调用一次,我会假设(没有任何迹象表明我已经发现)它会关闭中断,存储flags并在func()中恢复它们,然后将它们恢复到flag在test中的状态。
只有在test函数完成后,才应重新启用中断。
我要说的是,您唯一需要注意的是,您不能在两个函数中使用相同的flag变量,否则您将在内部调用中覆盖第一个变量,然后重新设置它,如果在调用之间有任何标志发生更改,您可能会将外部变量重新设置为错误的状态。
https://stackoverflow.com/questions/12584240
复制相似问题