|
一、V3版本编译器的 中断函数写法如下格式:
void __attribute((interrupt(0x0c))) ISR_tmr0 (void)
{
tick++ ;
}
中断服务函数必须遵守下列规定:
→ 返回的数据类型必须是 void
→ 不能有参数
→ 必须使用__attribute__((interrupt(0x0c))) 设定中断向量值 (interrupt vector)
→ 中断入口会自动保存寄存器(ACC, BP, STATUS, MP/TBLP),并在中断出口
时恢复。
→ 既可以被中断服务程序访问也可以被其他函数访问的全局变量应定义为
volatile。
二、中断服务函数的使用注意事项:
1、C Compiler V3 支持中断内部调用函数,但不同中断与main 之间不能调用同一
个函数,会造成RAM 重叠,对此现象linker 将侦测出并报warning ( 若被调用
的函数无声明及使用任何的local 变量可忽略此warning),如下例子:
void fun1(){}
void fun2(){fun1();}
void main()
{
fun1();
}
void __attribute((interrupt(0x04))) isr1(void)
{
fun1();
}
void __attribute((interrupt(0x08))) isr2(void)
{
fun2();
}
2、一般,如果两个函数没有调用关系,那它们的局部变量是可以分配到同样的地
址,但中断服务程序不会与主函数共享局部变量的地址,所以,为了减少RAM
的使用,中断程序可以尽量简单,不宜写得太过复杂。
3、虽然不同的中断事件可以嵌套发生,但是同一个中断事件不可以嵌套发生,必须等候
前一个发生被处理完成后,才能认可下一个中断事件。针对不具有中断可嵌套
发生的微控制器,则在中断服务函数内不可开启中断功能。
4、禁止在打开中断情况下,不写中断服务函数,这样可能会导致单片机出现异常状态或者死机。
|
上一篇:HOLTEK新推出HT68F2422红外线驱动MCU下一篇:关于合泰中断及中断函数的一些注意事项
|