问题描述:
不知道大家在做项目的时候有没有遇到过这样一个问题:程序运行不下去,没有结果。进入调试模式,发现停在了B.处,程序不再往下运行。
原因分析:
那么究竟是什么原因?
我以前也是摸不着头脑,但是项目做的多了,就会对一些底层的知识有更深刻的理解,通过我以前的经验我总结出下面几种原因。
- 数组访问越界;
- 堆栈溢出;
- 开启中断但未定义中断服务函数;
- 野指针
注:可以看B.附近如果是外部中断,可能就是未定义中断服务函数。如果是内核中断,可能是堆栈堆栈溢出、访问越界等问题。
解决方案:
当然解决方案也显而易见。
- 第一种肯定是排查自己的代码是否访问越界的地方,要注意代码规范化;
- 第二种检测是否有浪费的堆栈空间,比如malloc空间是否释放、是否定义过多无用的变量、数组是否太长。或者直接在启动文件(.s文件)中直接调整堆栈的大小;
如图所示:Heap_Size是堆的大小,Stack_Size是栈的大小。 - 第三种是因为你如果打开了中断服务函数,那么B.这里就是默认的弱中断服务函数,如果没定义自己的中断服务函数,就会进到默认的这里。
只能逐一排查中断服务函数是否没写中断服务函数,或者通过某些寄存器来排查是哪个中断,大家可以自行百度,这里只进行说明。
本文属于本人的知识整理,由于很多知识个人理解的内容,可能有错漏的地方,如果您阅读本文过程中发现有不合适的地方,您可以在评论区留言指出,本人将感激不尽。