BSP 早期初始化为什么要按电源、时钟、Pinmux、复位和驱动依赖排序?
外设访问前必须保证供电域稳定、时钟可用、复位释放、引脚复用正确;某些器件还需延时和上电序列。BSP 应显式描述依赖并让失败可诊断,而不是依赖偶然的全局构造或源码顺序。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
外设访问前必须保证供电域稳定、时钟可用、复位释放、引脚复用正确;某些器件还需延时和上电序列。BSP 应显式描述依赖并让失败可诊断,而不是依赖偶然的全局构造或源码顺序。
启用浮点上下文后,异常入口可先保留延迟压栈状态,仅当 Handler 真正执行浮点指令时才保存更多寄存器,降低多数中断开销。但一旦触发会增加当前中断延迟和栈占用,RTOS 还需正确管理任务浮点上下文。
SysTick 常提供周期时基并触发调度判断,PendSV 设为很低优先级执行上下文切换,SVC 用于从 Thread Mode 请求特权内核服务或启动首任务。分工让切换延后到高优先级中断完成后。
LDREX 读取并建立独占监视,STREX 仅在监视条件仍有效时写入并报告成功;中断、其他主设备写入或实现事件可能清除监视,所以比较交换必须在循环中重试。它解决原子性,内存顺序仍需合适屏障。
异常退出时若已有待处理中断,Tail-Chaining 可跳过完整出栈再入栈,直接切换处理程序;入栈期间若更高优先级异常到达,Late Arrival 可先服务更高者。这些优化降低固定开销但不改变优先级规则。
安全归属由 SAU/IDAU 和实现内存映射决定,Secure 世界保存密钥和关键服务,Non-Secure 只能通过受控的 NSC Gateway 调用。中断、外设、DMA 和调试接口也必须纳入边界,而不只是给函数加属性。
Write-Back 只在替换或清理时写下级存储,性能和带宽好但与 DMA 共享时需维护一致性;Write-Through 写 Cache 同时向下传递,简单但总线写流量大。Write Allocate 决定写缺失时是否先装入 Cache Line。
Semihosting 通过特殊陷阱让调试器代替目标完成输出、文件等操作;没有调试器接管时陷阱可能进入异常或永久等待。发布版本应使用真实串口/RTT/环形日志或关闭对应库路径。