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

标签 c embedded

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

相关文章:

c - 如何使用指针获取数组的索引

iphone - 使用 strftime 将 NSDate 转换为字符串

c - 我真的应该使用 make 吗?

c - 使用零初始化数据使 ARM Fromelf 输出二进制

linux - 如何在 Linux 中避免共享 IRQ 竞争

c - KDS——最终启动顺序错误

Python C 包装器内存泄漏

c++ - 如何使用 win32 从多线程上下文初始化线程原语?

C++ 为什么 va_start 需要最后一个非可变参数函数参数?

c - 如何与LCD通信(嵌入式C)