sdcc man阅读笔记(六)——中断

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、关键字

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
{
...
...
}

同样对单独的语句也可以使用


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值