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
編譯器通過(guò)添加 __interrupt 關(guān)鍵字來(lái)擴(kuò)展 C/C++ 語(yǔ)言,該關(guān)鍵字指定函數(shù)被視為中斷函數(shù)。此關(guān)鍵字是一個(gè) IRQ 中斷。除了在嚴(yán)格 ANSI C 或 C++ 模式中,還可以使用備用關(guān)鍵字“interrupt”。
請(qǐng)注意,節(jié) 5.11.16 中描述的中斷函數(shù)屬性是聲明中斷函數(shù)的推薦語(yǔ)法。
處理中斷的函數(shù)遵循特殊的寄存器保存規(guī)則和特殊的返回序列。該實(shí)現(xiàn)方案強(qiáng)調(diào)安全性。中斷例程不假定各種 CPU 寄存器和狀態(tài)位的 C 運(yùn)行時(shí)慣例有效;相反,它會(huì)重新建立運(yùn)行時(shí)環(huán)境假定的任何值。當(dāng) C/C++ 代碼被中斷時(shí),中斷例程必須保留例程或例程所調(diào)用任何函數(shù)使用的所有機(jī)器寄存器的內(nèi)容。在函數(shù)定義中使用 __interrupt 關(guān)鍵字時(shí),編譯器會(huì)根據(jù)中斷函數(shù)的規(guī)則和中斷的特殊返回序列生成寄存器保存。
您只能將 __interrupt 關(guān)鍵字與定義為返回 void 且沒(méi)有參數(shù)的函數(shù)一同使用。中斷函數(shù)的主體可以有局部變量,并且可以自由地使用?;蛉肿兞俊@纾?/p>
__interrupt void int_handler()
{
unsigned int flags;
...
}名稱 c_int00 是 c/c++ 的入口點(diǎn)。此名稱是為系統(tǒng)復(fù)位中斷而保留的。這個(gè)特殊的中斷例程可初始化系統(tǒng)并調(diào)用 main() 函數(shù)。因?yàn)樗鼪](méi)有調(diào)用方,所以 c_int00 不保存任何寄存器。