c - 通过中断在模式之间切换

标签 c interrupt

我想通过滑动开关生成的中断在两种模式之间切换。最初,我读取当前位置并选择模式/功能。我想当开关的位置改变时在两者之间切换。我有一个中断发生在两个边缘(每当位置改变时)。然而,由于这两个函数在 while 循环中连续运行,我不能只在中断中调用它们。基本上我有这样的东西:

interrupt()
{
 //not sure how to switch between modes here
}

main()
{
  //choose mode on startup
  if (switch_HIGH)
    modeA();
  else
    modeB();
}

modeA()
{
    while(1)
    {
      //do something
    }
}

modeB()
{
    while(1)
    {
      //do something
    }
}

我不知道将一个函数保留在原来的位置并转移到其他函数是否是一个好主意,但我想不出任何其他方法来做到这一点。如果有人能告诉我如何解决这个问题,我将非常感激。 我使用的语言是C,平台是Altera DE1开发板上的NIOS系统。

最佳答案

为此使用中断似乎毫无意义;只需轮询每个循环上的输入,然后像您正在做的那样调用正确的函数就简单得多。

更新:我刚刚意识到你的代码没有循环,所以上面的内容当然有点难以理解。

我的意思是你可以像这样构建你的程序:

int main(void)
{
  initialize_hardware();
  while(1)
  {
    if(switch_HIGH)
      modeA();
    else
      modeB();
  }
}

这使得 CPU 陷入无限循环,并且在每次迭代时它都会检查开关并根据当前的情况调用 modeA()modeB()模式。

添加中断除了增加更多的复杂性之外没有任何好处。

也就是说,我要做的是使用函数指针来指示当前模式,并根据开关的状态在中断内更改函数指针的值。然后在主循环中调用指向的函数。

请记住正确初始化该函数,因为当设备退出重置时您可能不会收到中断。这是反对该解决方案的另一个论点;复杂性比每次迭代时检查开关要大得多。

关于c - 通过中断在模式之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627291/

相关文章:

c - 合并排序算法中递归划分函数的目的是什么?

c - 我正在尝试开发一个程序,将我的消息(字符串)排列在 x*width 矩阵中

assembly - 向量中断

c - 在双缓冲区交换期间处理 UART ISR

cpu - 什么是时钟中断?

c - 嵌入式系统中的启动代码流程,引导加载程序的概念?

c - 用于索引 3D 矩阵的 1 维数组

bash - 当我中断 bash 脚本时试图关闭所有子进程

Python,无法在 Windows 中使用 Ctrl-C 中断子进程

c - 如何在 ubuntu 11.10 的 eclipse IDE 中编程和编译 C?我需要安装哪个插件?