ZHCU876Z July 2001 – October 2023 SM320F28335-EP
编译器通过添加 __interrupt 关键字来扩展 C/C++ 语言,该关键字指定函数被视为中断函数。此关键字是一个 IRQ 中断。除了在严格 ANSI C 或 C++ 模式中,还可以使用备用关键字“interrupt”。
请注意,节 6.9.15 中描述的中断函数属性是声明中断函数的推荐语法。
处理中断的函数遵循特殊的寄存器保存规则和特殊的返回序列。该实现方案强调安全性。中断例程不假定各种 CPU 寄存器和状态位的 C 运行时惯例有效;相反,它会重新建立运行时环境假定的任何值。当 C/C++ 代码被中断时,中断例程必须保留例程或例程所调用任何函数使用的所有机器寄存器的内容。在函数定义中使用 __interrupt 关键字时,编译器会根据中断函数的规则和中断的特殊返回序列生成寄存器保存。
您只能将 __interrupt 关键字与定义为返回 void 且没有参数的函数一同使用。中断函数的主体可以有局部变量,并且可以自由地使用栈或全局变量。例如:
__interrupt void int_handler()
{
unsigned int flags;
...
}
名称 c_int00 是 c/c++ 的入口点。此名称是为系统复位中断而保留的。这个特殊的中断例程可初始化系统并调用 main() 函数。因为它没有调用方,所以 c_int00 不保存任何寄存器。