假设我有两个 C 函数,a()
和 b()
。
假设我有两个中断对应于两个函数。第一个中断应该开始运行函数 a()
并在运行期间被中断时停止运行 b()
。同样,第二个中断对函数 b()
做同样的事情。
如果我当前正在运行 a()
,并且触发了 b()
的中断。如何启动 b()
并防止 a()
在中断处理程序完成后完成?
代码如下:
int main(void)
{
Init();
while (true)
{
if (run_A)
{
a();
run_A = false;
}
if (run_B)
{
b();
run_B = false;
}
}
void Handler(void)
{
IntClear(interruptMask);
if (INTERRUPT_FOR_A)
{
run_A = true;
}
if (INTERRUPT_FOR_B)
{
run_B = true;
}
}
最佳答案
I have a situation where b() calls a function that does some work that I don't need if I want to switch back to a(). I want to prevent it from happening when I call a(), and minimize the time it takes to start a()
如果 INTERRUPT_FOR_B
发生并且在很短的时间内 INTERRUPT_FOR_A
发生,并且如果 b()
运行时间更长,则基本上会发生这种情况时间。
在进行过早的优化之前,您需要仔细考虑这种情况并找出发生的可能性。
但是,如果您想继续,可以在函数 b()
中设置一些检查点,以查看 run_A
是否为真。
例如
void b(void)
{
// some code.
if (run_A == true) return;
// some code
if (run_A == true) return;
// etc
}
请注意,您需要使用所有返回路径正确分析和测试 b
函数,以确保该函数在所有情况下都能正常运行。
关于c - 停止当前从中断处理程序运行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56218896/