单片机的一种栈溢出检测方法
发布时间
阅读量:
阅读量
在进行裸奔操作时,始终对栈空间是否会发生溢出问题感到忧虑。由于无法准确预测栈的使用情况,因此在配置栈大小时往往存在偏差,要么设置过大造成资源浪费,要么设置过小导致运行异常。今日,我构思了一种简易的检测手段,能够有效判断栈是否出现溢出现象,以下是我具体的设计思路。
1、查阅*.map文件内容,定位并获取栈顶地址;
2、声明一个全局变量,用于记录栈顶初始化时的数据;
3、在系统初始化阶段将获取到的栈顶数据赋值给上述定义的全局变量;
4、在系统的主循环中持续监测该全局变量所存储的栈顶数据是否发生变化。
接下来将上述思路通过伪代码形式进行实现说明。
从*.map文件中提取栈顶地址的操作属于内存映射分析范畴,本文不涉及该部分的具体实现方式,此处略去;
int main()
{
uint8_t Stack_Flag=0;
/执行系统初始化操作/
Stack_Flag = (uint8_t)0x20000210;
while(1)
{
/执行用户自定义代码/
if(Stack_Flag != (uint8_t)0x20000210)
{
/触发特定标志位或调整某I/O端口电平状态/
}
}
}
以上即为一种检测栈溢出的基本方法,在实时操作系统环境下可实现对栈使用情况的动态监控。关于该方
全部评论 (0)
还没有任何评论哟~
