Skip to content

中断

异步通讯模式,节约CPU的资源

任何打断系统正常进行的流程:外部中断、内部异常

中断控制器

根据中断屏蔽优先级,中断是否使能等各种条件进行筛选,最后通知CPU,CPU进行跳转执行相应的处理,PC指针跳转到中断向量表中,向量表中存储不同的跳转指令,跳转至相应的中断函数。

在进行跳转之前CPU会对CPSR(程序状态)寄存器进行保存,并重新设置模式,将各种数据、状态压入栈,然后根据中断号跳转到对应的处理函数,处理完毕之后复原。

:中断返回的语句是当前执行的语句,函数返回的语句是当前语句的下一句。

进程栈与中断栈

栈是C语言的基础,每个任务都有自己的栈,给函数的调用使用以及在被打断是保存现场环境。

调度器为了更好的管理每一个任务,为每一个任务提供了一个结构体

保存的内容

  • PC、SP指针
  • 各种寄存器
  • SP一般会保存到任务结构体

三种栈

  • 进程栈:用户使用
  • 内核栈:操作系统使用
  • 中断栈:中断函数使用

中断栈作用

  • 中断函数使用

  • 如果在进行中断函数的时候有新的中断,把正在进行的中端函数的信息保存于栈中

:Linux中断栈一般较小(4KB-8KB),使用时注意分配

中断函数的实现

注意以下三点

  • 调用时间不固定,保护现场
  • 调用地点不确定,没有参数
  • 返回不确定,没有返回值

基本原则

不能有返回值

不能有参数

不能调用不可重入函数如printf

不能引起睡眠

应该短小精悍