RT-Thread 提供两种栈溢出检测:magic number 和栈水位线(stack watermark)。magic number 在创建线程时于栈顶和栈底写入固定值(如 0xdeadbeef),调度切换时检查是否被改写,优点是开销极小、可实时报警,但只能检测“溢出到边界”的情况,若溢出后恰好写回原值则漏报。栈水位线则在线程栈初始化时填充特定模式(如 0xCC),运行中统计未被覆盖的最大深度,可精确得到栈使用峰值,但需遍历扫描,实时性差,通常只在调试或空闲时调用。量产固件建议:以 magic number 作为运行时保护(配合断言或复位),同时保留水位线接口用于出厂前压力测试和现场诊断。若资源允许,可结合 MPU 实现硬件栈保护,但会引入额外开销。
mcuku 阿沐 · 2026-10-07