ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
編譯器通過添加 __interrupt 關鍵字來擴展 C/C++ 語言,該關鍵字指定函數被視為中斷函數。此關鍵字是一個 IRQ 中斷。除了在嚴格 ANSI C 或 C++ 模式中,還可以使用備用關鍵字“interrupt”。
請注意,節 5.11.16 中描述的中斷函數屬性是聲明中斷函數的推薦語法。
處理中斷的函數遵循特殊的寄存器保存規則和特殊的返回序列。該實現方案強調安全性。中斷例程不假定各種 CPU 寄存器和狀態位的 C 運行時慣例有效;相反,它會重新建立運行時環境假定的任何值。當 C/C++ 代碼被中斷時,中斷例程必須保留例程或例程所調用任何函數使用的所有機器寄存器的內容。在函數定義中使用 __interrupt 關鍵字時,編譯器會根據中斷函數的規則和中斷的特殊返回序列生成寄存器保存。
您只能將 __interrupt 關鍵字與定義為返回 void 且沒有參數的函數一同使用。中斷函數的主體可以有局部變量,并且可以自由地使用棧或全局變量。例如:
__interrupt void int_handler()
{
unsigned int flags;
...
}名稱 c_int00 是 c/c++ 的入口點。此名稱是為系統復位中斷而保留的。這個特殊的中斷例程可初始化系統并調用 main() 函數。因為它沒有調用方,所以 c_int00 不保存任何寄存器。