第六章 中断、时钟与输入输出


文档摘要

第六章 · 中断、时钟与输入输出 本章要回答的三个问题:中断服务程序里哪些事能做、哪些绝不能做,为什么?系统的节拍从哪来,毫秒级与微秒级的定时需求分别该怎么满足?外部设备的数据搬运怎么设计,才不会把截止期拖垮? 为什么会有这一章 前四章的机制都发生在「任务世界」里,本章跨过边界,面对处理器与外设的交界处——这是实时系统里时间刻度最细的地方。中断延迟以微秒计,节拍以毫秒计,一次不当的驱动设计却能把毫秒级的阻塞传遍整个任务世界。很多在任务层面百思不解的抖动,答案都在这一章的范围里:某个中断服务程序里偷偷调了阻塞函数,某个外设驱动在关中断状态下搬运了四百字节数据。 本章四节按信号流方向排列:外部事件先撞上中断机制(6.1),时间性的事件由时钟与定时器生成(6.

第六章 · 中断、时钟与输入输出

本章要回答的三个问题:中断服务程序里哪些事能做、哪些绝不能做,为什么?系统的节拍从哪来,毫秒级与微秒级的定时需求分别该怎么满足?外部设备的数据搬运怎么设计,才不会把截止期拖垮?

为什么会有这一章

前四章的机制都发生在「任务世界」里,本章跨过边界,面对处理器与外设的交界处——这是实时系统里时间刻度最细的地方。中断延迟以微秒计,节拍以毫秒计,一次不当的驱动设计却能把毫秒级的阻塞传遍整个任务世界。很多在任务层面百思不解的抖动,答案都在这一章的范围里:某个中断服务程序里偷偷调了阻塞函数,某个外设驱动在关中断状态下搬运了四百字节数据。

本章四节按信号流方向排列:外部事件先撞上中断机制(6.1),时间性的事件由时钟与定时器生成(6.2),数据要进出设备则经过 I/O 模型(6.3)与文件系统、网络栈(6.4)。读完本章,第一章里那句「中断与时钟组件负责发现时间到了」就完整落地了。

读完能解决什么

  • 把一个外设事件正确地接进内核:向量配置、优先级设定、FromISR 调用、出口切换,一步不漏;
  • 用「短进短出」原则审查任何一段中断服务程序,指出其中所有越界操作;
  • 在系统节拍、硬件定时器、软件定时器三者之间为具体定时需求选择正确的工具;
  • 为一个数据采集需求选择轮询、中断、DMA 加双缓冲的正确搬运方式;
  • 判断一个文件系统或网络栈的调用会不会引入截止期风险,以及如何隔离它们。

各节怎么分工

节号 回答的问题 关键产出
6.1 中断机制 事件如何进入系统,延迟由哪几段构成 延迟构成清单与嵌套、屏蔽的规则
6.2 时钟与定时器 节拍从哪来,各级定时的精度边界 节拍配置准则与定时器选型阶梯
6.3 实时 I/O 模型 数据搬运的几种姿势与代价 四种搬运方式对比与选型流程
6.4 文件系统与网络栈 重型组件怎么用才不伤实时 隔离设计与缓冲策略

先决条件

需要 2.1 节的两条内核链路(时钟链路、信号量链路)与 4.2 节的队列管线——本章的很多规则就是那两条链路的延伸。

本章全景图

从外设引脚到任务代码,一个事件要走完整条链路。链路上每一站的时间消耗都有界且可测,实时分析做的就是把各段加起来:

图里从顶到底的时间跨度通常只有几十微秒,但任何一站失控——中断被屏蔽太久、服务程序太长、队列太深——都会把这几十微秒放大成任务世界的毫秒级抖动。

往下走到哪

中断与时钟解决「事件与时间」,下一章把视野拉宽到系统级:多个处理器核怎么协同守住各自的截止期、电池供电的设备怎么在守住截止期的同时把功耗压到最低、以及当截止期关系人身安全时整个开发流程要怎么升级。

中断预算的编制与守恒

与内存预算对应,第六章的方法落成中断预算:每个中断一行,列出触发速率、服务时长上界、允许延迟、优先级档位。汇总时做两个校验。守恒校验:所有中断的「速率乘时长」之和加上所有任务的利用率,不得超过处理器总数——单核系统就是不得超过一。优先级校验:从最高档开始逐档计算「本档及以下所有中断被更高档打断后的最坏延迟」,与该档的允许延迟对照,超了就调档或压服务时长。

这份预算还有个容易忽视的消费者:低功耗设计。7.2 节的平均电流算式里,活跃时间主要由中断与任务唤醒构成,中断预算表里的速率列直接决定电池寿命。省电设计的源头常常不是电源管理代码,而是砍掉几个本不该存在的中断。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U