簡體   English   中英

C中斷

[英]Interrupts in C

我有一個關於C中斷的問題。

信息:我使用Altera的DE0開發板,該開發板可與NIOS II一起使用,並使用C語言進行了編碼。

實際代碼說明:

我有一個main()我有一個while(1)循環。 我用一個Switch-Case構造和狀態自己的typedef編碼了一個自動機。

現在我的問題是:

  • 在每種情況下,我都會舉辦各種活動。 例如,我調用方法或控制某些LED。

我想將Switch-Case構造中的事件外包到一個中斷服務例程(ISR)中。

我可以通過按按鈕1和/或按鈕2來引起狀態更改,ISR將捕獲該狀態更改。

我的問題:ISR如何知道哪種情況對應於哪個事件?

是否可以為每個按鈕編寫不同的ISR?

這段代碼可以做到嗎:

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

根據您提供的信息,

您可以將狀態變量設置為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修改狀態並從現有狀態機執行功能。

是否可以為2個按鈕編寫不同的ISR?

正如您沒有提到的那些按鈕的連接方式一樣,您可以將兩個按鈕連接到兩個不同的“外部硬件中斷”引腳,並且可以為每個外部硬件中斷編寫一個ISR。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM