我对C中的中断有疑问。
信息: 我使用Altera的DE0板,它与NIOS II配合使用,并用C编码。
实际代码说明:
我有一个main()
我有一个while(1)
循环。我使用Switch-Case结构编写了一个Automaton,为状态编写了我自己的typedef
。
现在问我的问题:
我想将Switch-Case结构中的事件外包到中断服务程序(ISR)中。
我可以通过按下按钮1和/或按钮2来引起ISR将捕获的状态更改。
我的问题: ISR如何知道哪个案例对应哪个事件?
是否有可能为每个按钮编写不同的ISR?
这段代码能否实现这一目标:
void alt_irq_register(irNr, (void *) contextPtr, (void *) devPtr);
答案 0 :(得分:3)
取决于您提供的任何信息,
您可以将状态变量设为Global,并确保将其设为volatile
,因为您将从ISR修改它。
void ISR_Func()
{
Read which button is pressed
Assign value to state variable
}
void main()
{
while(1)
{
switch(state_variable)
{
case Button_1:
button1_func();
break;
case Button_2:
button2_func();
break;
default:
break;
}
}
}
我的问题:ISR如何在女巫案件中知道并且做了 相应的事件?
不建议从ISR执行状态机功能。最好从ISR修改状态并从现有状态机执行功能。
是否有可能为2个按钮编写不同的ISR?
由于您没有提到这些按钮是如何连接的,您可以将两个按钮连接到2个不同的"外部硬件中断"引脚,你可以为每个外部硬件中断写一个ISR。