我正在用ISO C90编写代码,它禁止混合声明和代码。 所以我有这样的事情:
int function(int something)
{
int foo, ret;
int bar = function_to_get_bar();
some_typedef_t foobar = get_this_guy(something);
spin_lock_irqsave(lock);
/*
Here is code that does a lot of things
*/
spin_unlock_irqrestore(lock);
return ret;
}
问题是硬件或软件中断是否发生,它可以在哪个地方中断我的功能,是否也会在变量声明中发生?
为什么我问这是因为我需要这个功能不被中断打断。我想使用spin_lock_irqsave()来确保,但我想知道中断是否可以在变量声明中中断我的函数?
答案 0 :(得分:5)
中断是高度专用的硬件平台。但是没有"变量声明"在处理器运行的代码中。变量只是预先确定的内存(或寄存器,如果编译器选择的话)。
如果你的意思是分配变量然后是,通常可以发生中断。如果您需要function_to_get_bar()
不要被打断并且spin_lock_irqsave(lock);
保证不会被中断,那么只需在其中移动作业。
int function(int something)
{
int foo, ret;
int bar; // This is declaration, just for the compiler
some_typedef_t foobar;
spin_lock_irqsave(lock);
bar = function_to_get_bar(); // This is assignment, will actually run some code on the CPU
foobar = get_this_guy(something);
/*
Here is code that does a lot of things
*/
spin_unlock_irqrestore(lock);
return ret;
}