代码和数据放 ITCM、DTCM、片上 SRAM 或 DDR 应怎样权衡?
TCM 延迟低且确定性强,适合关键 ISR、控制环和栈,但容量小且未必可被 DMA 访问;片上 SRAM 较快;DDR 容量大但受 Cache、刷新和竞争影响。放置必须同时考虑可达性、带宽、确定性和启动拷贝。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
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 并提供保护。选择取决于生命周期和内存布局。
Idle 任务在没有其他就绪任务时运行,可用于低优先级清理、空闲计数和进入低功耗,但 Hook 不能阻塞。无条件喂狗只能证明 Idle 得到调度,未必证明所有关键任务健康。
更高 Tick 提高基于 Tick 的延时分辨率,却增加中断和调度开销,仍不能保证更低业务延迟。Tickless Idle 在预期空闲期停止周期 Tick,用低功耗定时源一次唤醒并补偿经过的 Tick。
优先级应由响应时间、截止期、周期和阻塞分析决定,而不是职位或模块名称。先识别硬实时链路和中断到任务路径,估算 WCET 与共享资源阻塞,再用压力测试和 Trace 验证。