项目

一般

简介

功能 #3386

涛 陆 更新于 3 个月 之前

参考软件DR-003701-707983 Stack Overflow/Underflow  
 需求描述 
 若堆栈发生溢出,软件无法从此状态恢复,必须重新初始化。 
 ·软件需在堆栈溢出/下溢发生后的25毫秒内检测到该状态。 
 ·当堆栈溢出/下溢时,模块必须完成以下操作: 
     更新参数标识符PID D701的字节#1(若适用) 
     强制执行复位(Force a Reset) 

 技术规范 
         在并发系统(concurrent systems)中,堆栈溢出(stack overflow)是最常见的问题之一。其成因之一是程序员未为任务分配足够内存;为避免此问题,开发者倾向于为堆栈分配过量内存,导致程序可能永远用不到这些资源。 
         理想情况下,每个任务都保留了足够的资源,这样就不会浪费内存,并且每个任务都有可用的内存(即使在最糟糕的情况下)。实现完美的平衡可能非常困难(分配尽可能多的堆栈,但尽可能灵活)。 
         即便采用最优策略和/或方法,堆栈尺寸计算在多数情况下仅为预估。因此,若分配资源无法满足任务需求,堆栈溢出风险始终存在。 
 例如,若程序员在堆栈已满时尝试执行"压栈(push)"操作,将发生堆栈溢出(stack overflow);反之,若系统在堆栈为空时执行"弹栈(pop)"操作,则触发堆栈下溢(stack underflow)。 
 堆栈溢出/下溢的负面后果包括: 
 . 内存损坏(Memory corruption) 
 . 任意代码执行(Arbitrary code execution) 
 . 系统崩溃(System crash) 
 . 未定义行为(Undefined behavior) 
 故障诊断难点: 
 确定堆栈溢出/下溢为软件问题的根本原因极具挑战性。 
 故障日志记录要求: 
 对于支持软件健康监控与报告(Software 对于支持**软件健康监控与报告(Software Health Monitoring & Reporting)功能的模块,其最低要求已通过PARSED文档发布。请参阅该文档以获取潜在附加要求(参见链接)。 Reporting)**功能的模块,其最低要求已通过PARSED文档发布。请参阅该文档以获取潜在附加要求(参见链接)。 
 本设计规则支持RQT-003701-705379“堆栈溢出/下溢”,适用于所有带软件的电子模块,是符合RQT的方法。 
         设计规则关闭机制:这些设计规则的结束是软件技术设计评审(TDR)的完成,并通过“SWQA通用TDR检查表”问题解决: 
             阐述堆栈溢出/下溢(stack overflow/underflow)的预防与检测技术 
 IRH08009                     
                     
                                      A) 如何检测堆栈溢出/下溢? 
 
                                      B) 堆栈溢出/下溢是否会导致复位(reset)? 
 
                                      C) 堆栈溢出/下溢是否被记录(如DTC或供应商内部故障日志)? 
 
                                      D) 堆栈余量(stack margin)是多少?如何检测余量? 
 
                                      E) 如何确定所需的堆栈资源? 

返回