FreeRTOS heap_1 到 heap_5 的能力和适用场景有什么差别?
heap_1 只分配不释放;heap_2 可释放但不合并相邻空闲块;heap_4 支持合并并常用于单一区域;heap_5 在 heap_4 基础上支持多个不连续内存区;heap_3 包装标准 malloc/free 并提供保护。选择取决于生命周期和内存布局。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
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 验证。
固定优先级 Rate Monotonic 通常让周期越短优先级越高,实现简单、可分析;EDF 动态让截止期最近任务优先,在理想单核模型下利用率上限更高,但实现、过载行为和资源共享分析更复杂。
多核任务可真正并行,关本核中断不能保护另一核访问;内核和应用需要跨核原子、Spinlock、IPI 和 Cache 一致性。任务迁移还会影响 Cache 热度、外设亲和性和时延可预测性。
Stream Buffer 传递无边界字节流,接收端自行分帧;Message Buffer 在内部保存每条消息长度,接收时保持消息边界。它们通常针对单写者单读者优化,多写/多读需额外串行化。
事件位只表示某条件当前已发生/成立,多次 Set 同一位会合并成一个状态;等待可选择任一或全部并在返回时清除。若必须知道发生次数或每次携带的数据,应使用计数信号量或队列。