为什么带 Semihosting 的固件脱离调试器后可能卡死?
Semihosting 通过特殊陷阱让调试器代替目标完成输出、文件等操作;没有调试器接管时陷阱可能进入异常或永久等待。发布版本应使用真实串口/RTT/环形日志或关闭对应库路径。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
Semihosting 通过特殊陷阱让调试器代替目标完成输出、文件等操作;没有调试器接管时陷阱可能进入异常或永久等待。发布版本应使用真实串口/RTT/环形日志或关闭对应库路径。
TCM 延迟低且确定性强,适合关键 ISR、控制环和栈,但容量小且未必可被 DMA 访问;片上 SRAM 较快;DDR 容量大但受 Cache、刷新和竞争影响。放置必须同时考虑可达性、带宽、确定性和启动拷贝。
Bootloader/App 切换、RAM 中动态向量或多镜像系统需要把 VTOR 指向当前有效且满足对齐的向量表。切换前应屏蔽相关中断、清理 pending,保证表内容写完并用必要屏障后再开放。
主核通常准备副核入口、栈和共享数据,完成必要 Cache Clean 与屏障后写启动寄存器或发送事件;副核唤醒后建立自身运行环境并通过 Mailbox/共享内存握手。共享缓冲必须定义一致性和所有权。
不可变或受保护的 Root of Trust 验证下一阶段签名,每阶段再验证后继镜像,形成链式信任。镜像要绑定目标、版本和安全计数;根密钥通常用哈希或公钥槽保存,并预留多槽、撤销位和安全更新机制。
流水线把取指、译码、执行等阶段重叠,让稳态下单位时间完成更多指令;单条指令仍需经过多个阶段。数据相关、结构冲突、分支和异常会造成停顿、转发或清空。
heap_1 只分配不释放;heap_2 可释放但不合并相邻空闲块;heap_4 支持合并并常用于单一区域;heap_5 在 heap_4 基础上支持多个不连续内存区;heap_3 包装标准 malloc/free 并提供保护。选择取决于生命周期和内存布局。