我想通过滑动开关生成的中断在两种模式之间切换。最初,我读取当前位置并选择模式/功能。我想当开关的位置改变时在两者之间切换。我有一个中断发生在两个边缘(每当位置改变时)。然而,由于这两个函数在 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/