当前位置: 代码迷 >> 单片机 >> 关于STM8死机和重启的有关问题
  详细解决方案

关于STM8死机和重启的有关问题

热度:1205   发布时间:2016-04-28 16:36:01.0
关于STM8死机和重启的问题
我们公司有一个用STM8做的产品(没用系统),之前的程序跑起来一直很正常;后来公司想在该产品上增加无线数据通讯的功能,我将代码写好后加进去发现原来的主要功能和现在的无线数据通讯功能都能正常运行。但是在进入某个菜单界面进行一些设置时一直会死机和重启。
  我进入到这部分菜单程序,把里面的一条case语句注释掉就可以正常运行(这些菜单程序都是以前的,并不是我这部分的)。后来发现的确是我的程序造成的,因为我将我这部分的代码屏蔽后就恢复正常。但问题是,在进入这个菜单时并没有调用我的那部分程序。我的这部分程序只有在运行原程序的某一部分的时候才会被调用。并且在不进入那个菜单时,我的那部分程序和原程序都能正常运行。但是一进入那个菜单,按下确定键进行设置时就死机或者重启。
  用的是IAR的开发环境。我在查找问题的时候发现越查越诡异。我将我的那部分代码分成两半,把某一半注释掉流另一半后编译烧进去,发现正常,于是我把另一半注释掉,把原先的那部分恢复后编译烧进去发现也正常,但是都不屏蔽的话就不行。后来实在没办法了,我将我的程序经常要调用的一些函数(我写的)内容全部注释掉(也就是变成空函数了),再将我的主程序(加在原程序中)的所有代码注释掉然后一条一条放出来编译烧进去测试。发现放到一定程度就不能再放了,如果再放一条问题又会出现,不放就正常。但是那一条代码根本没有任何错误,只是一条简单的赋值语句。而且不是放某一特定语句会这样,而是在多加任何一条都不行。怎么会这样呢,我实在是想不通了。是不是芯片的堆栈什么的溢出了导致的。原程序比较大,编译后快超过64K了。哪位大侠能解惑一下,小弟不甚感激

------解决方案--------------------
1:看看你的复位电路是否完好
2:在线仿真看看死机的情况下,程序运行在哪里,锁定问题好调试
3:同时也可以利用单步运行来看看,也可以看看你的主要数组是不是溢出了
------解决方案--------------------
在软件上多找找原因,可能是遇到某种条件,计算异常或STACK溢出倒致的
------解决方案--------------------
问一个弱智的问题, 你的程序的大小会不会超出了改芯片的存储器的大小呢?