MMIO 寄存器做读—改—写为什么可能误清状态位?
寄存器位可能是写 1 清零、读清零、只写命令或硬件并发更新;普通 `reg |= mask` 会先读出全部位再写回,可能清除状态或覆盖硬件新值。必须按手册使用专用 SET/CLEAR 寄存器或精确写值。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
寄存器位可能是写 1 清零、读清零、只写命令或硬件并发更新;普通 `reg |= mask` 会先读出全部位再写回,可能清除状态或覆盖硬件新值。必须按手册使用专用 SET/CLEAR 寄存器或精确写值。
Pending 表示异常请求已等待处理,Active 表示处理器正在执行该异常。ISR 期间同一来源再次触发可再次置 Pending,退出后可能立即重入;是否丢失多次事件取决于外设状态位是计数、锁存还是合并。
传统 RISC 强调规则编码、Load/Store 和便于流水,CISC 提供更复杂多样的指令与寻址;现代处理器常把复杂指令译成内部微操作,也让 RISC ISA 加入丰富扩展,边界已经模糊。
SysTick 通常是 24 位向下计数器,可选时钟源也依内核和芯片实现,单次周期受重装值上限限制。长时间应由软件累计或低功耗定时器承担,还要考虑时钟动态变化和睡眠停钟。
异常退出时若已有待处理中断,Tail-Chaining 可跳过完整出栈再入栈,直接切换处理程序;入栈期间若更高优先级异常到达,Late Arrival 可先服务更高者。这些优化降低固定开销但不改变优先级规则。
安全归属由 SAU/IDAU 和实现内存映射决定,Secure 世界保存密钥和关键服务,Non-Secure 只能通过受控的 NSC Gateway 调用。中断、外设、DMA 和调试接口也必须纳入边界,而不只是给函数加属性。
WFI 等待可唤醒处理器的中断条件;WFE 观察事件寄存器,若事件已置位会先清零并立即返回,否则等待事件;SEV 可向处理器发送事件。它们是提示指令,实际低功耗深度还取决于系统控制和芯片电源配置。
Write-Back 只在替换或清理时写下级存储,性能和带宽好但与 DMA 共享时需维护一致性;Write-Through 写 Cache 同时向下传递,简单但总线写流量大。Write Allocate 决定写缺失时是否先装入 Cache Line。