一、关键字
1.1 interrupt&using
sdcc中,中断程序使用的关键字和keil一样:
void timer_isr (void) __interrupt (1) __using (1)
{
...
}
interrupt指定中断号,using指定register bank。
中断程序可以写在任意一个源文件里,但在包含main程序的源文件里,必须要有一份中断程序的声明。
如果使用register bank 0,那么系统会将当前程序用到的寄存器全都保存进堆栈。如果用到其他register bank,那么只会保存类似dptr这样的特殊寄存器。
1.2 critical
critical用于表示一个程序不能被中断打算,sdcc会在运行__critical修饰的程序前保存当前中断使能状态,并关闭所有中断,运行完了之后再打开。
int foo () __critical
{
...
...
}
同样对单独的语句也可以使用
__critical{ i++; }

本文是关于SDCC编译器中断处理的笔记,介绍了`interrupt`和`using`关键字的使用,以及中断程序中常见的错误,如变量未声明`volatile`、非原子指令导致的问题、堆栈溢出和使用不可重入函数的风险。同时强调了在中断处理中对堆栈管理和函数调用的注意事项。
最低0.47元/天 解锁文章
7411

被折叠的 条评论
为什么被折叠?



