一次 RH850 内存异常中,FEPC 和 LP 都指向了一个任务 Context 对象的首地址。这个巧合很容易把排查带向“OS 恢复错了上下文”。但沿着 MAP、结构体布局和栈帧继续看,会发现几件不同的事:对象地址可以作为普通数据被压栈;LP 可以从栈上恢复,也可以从 Context 字段恢复;异常处理函数里看到的 SP,还可能已经属于内核栈。
理解这些关系,才能判断眼前的是被破坏的控制流、保存得很正常的数据,还是另一个时间点留下的现场。
本文讨论 RH850/U2A 的 G4MH 内核与一个 MICROSAR OS 实现。Context 字段和 Region0 用途来自该案例的静态资料,不构成 AUTOSAR 对所有实现的布局规定。示意代码只表达机制。