C中断

时间:2015-06-02 17:23:04

标签: c microcontroller fpga

我对C中的中断有疑问。

信息: 我使用Altera的DE0板,它与NIOS II配合使用,并用C编码。

实际代码说明:

我有一个main()我有一个while(1)循环。我使用Switch-Case结构编写了一个Automaton,为状态编写了我自己的typedef

现在问我的问题:

  • 在每种情况下,我都会举办各种活动。例如,我调用方法或控制一些LED。

我想将Switch-Case结构中的事件外包到中断服务程序(ISR)中。

我可以通过按下按钮1和/或按钮2来引起ISR将捕获的状态更改。

我的问题: ISR如何知道哪个案例对应哪个事件?

是否有可能为每个按钮编写不同的ISR?

这段代码能否实现这一目标:

void alt_irq_register(irNr, (void *) contextPtr, (void *) devPtr);

1 个答案:

答案 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。