Appearance
中断
异步通讯模式,节约CPU的资源
任何打断系统正常进行的流程:外部中断、内部异常
中断控制器
根据中断屏蔽优先级,中断是否使能等各种条件进行筛选,最后通知CPU,CPU进行跳转执行相应的处理,PC指针跳转到中断向量表中,向量表中存储不同的跳转指令,跳转至相应的中断函数。
在进行跳转之前CPU会对CPSR(程序状态)寄存器进行保存,并重新设置模式,将各种数据、状态压入栈,然后根据中断号跳转到对应的处理函数,处理完毕之后复原。
注:中断返回的语句是当前执行的语句,函数返回的语句是当前语句的下一句。
进程栈与中断栈
栈是C语言的基础,每个任务都有自己的栈,给函数的调用使用以及在被打断是保存现场环境。
调度器为了更好的管理每一个任务,为每一个任务提供了一个结构体
保存的内容:
- PC、SP指针
- 各种寄存器
- SP一般会保存到任务结构体
三种栈:
- 进程栈:用户使用
- 内核栈:操作系统使用
- 中断栈:中断函数使用
中断栈作用:
中断函数使用
如果在进行中断函数的时候有新的中断,把正在进行的中端函数的信息保存于栈中
注:Linux中断栈一般较小(4KB-8KB),使用时注意分配
中断函数的实现
注意以下三点
- 调用时间不固定,保护现场
- 调用地点不确定,没有参数
- 返回不确定,没有返回值
基本原则
不能有返回值
不能有参数
不能调用不可重入函数如printf
不能引起睡眠
应该短小精悍