gpt4 book ai didi

c - 停止当前从中断处理程序运行的函数

转载 作者:太空狗 更新时间:2023-10-29 16:05:18 25 4
gpt4 key购买 nike

假设我有两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com