1、发生栈溢出上报的中断号
发生栈上溢,上报中断号0x18;发生栈下溢,上报终端号0x19;
2、栈溢出控制寄存器
1、MODE位设置为0,选择栈的上溢和下溢检查模式;
2、使能栈上溢检查和栈下溢检查;
3、设置栈顶
设置栈顶,也就是栈空间的低地址;(满减栈)
4、设置栈底
- 设置栈底,也就是设置栈空间的高地址;(满减栈)
5、RISC-V架构的栈
1、RISC-V的栈是满减栈,栈底是高地址,栈顶是低地址;
2、参考博客:《freeRTOS的栈溢出检测机制》;
6、栈溢出检测机制的工作逻辑
- 设置mstack_ctrl寄存器,选择栈上溢和下溢检测模式,并使能栈上溢检查和下溢检查;
- 设置mstack_bound寄存器,设置栈顶
- 设置mstack_base寄存器,设置栈底
- 当发生栈上溢和下溢时,会上报中断,通过查询mcause得知中断号,进而知道是发生上溢还是下溢
- 在中断处理程序中,可以通过查询sp、mepc等寄存器,定位出发生栈溢出的地方