ZHCAE28 May 2024 TMS320F2800132 , TMS320F2800133 , TMS320F2800135 , TMS320F2800137 , TMS320F2800152-Q1 , TMS320F2800153-Q1 , TMS320F2800154-Q1 , TMS320F2800155 , TMS320F2800155-Q1 , TMS320F2800156-Q1 , TMS320F2800157 , TMS320F2800157-Q1 , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
ERAD 模块中的增强型总线比较器 (EBC) 单元可以监测内部地址和数据总线,当指定的总线和掩码与指定值匹配时,EBC 会触发 RTOSINT 中断。因此,检测栈溢出的基本方法是配置 EBC 单元,在数据写入地址总线处于栈结束之前的某个范围内时触发中断。图 4-2 阐明了这一概念。该存储器仅保留供栈使用,因此指定地址范围内的数据写入表明栈使用量即将达到分配的大小限值。检测到即将发生的栈溢出会触发可屏蔽中断。程序编入的错误响应和任何必要的软件要求由系统集成商定义。
图 4-2 栈溢出监测API 函数 STL_SP_configSP(const STL_SP_Handle spHandle) 位于示例工程中,源代码位于 f280013x\source\stl_sp.c。需要配置 STL_SP_MARGIN 参数,参考值为 0x50。此参数定义了从栈尾观察到的存储器空间范围。