DSP程序死机(跑飞)的一些情况-软件原因
2017-10-08 09:49
639 查看
前面对DSP程序死机的硬件原因进行列举,并给出相应的解决办法,今天将DSP程序死机(跑飞)的软件原因列举一下。
软件死机主要原因是1、堆栈溢出;2、数组溢出;3、访问指向空地址的指针;4、未声明的函数调用跑飞。
1、堆栈溢出
以TI CCS3.3为例,程序运行的堆与栈的空间大小都是由软件设计师自己定义分配大小的。一般出现问题就是为DSP软件运行设置的堆或栈的空间太小,而导致程序不能正常运行。堆或栈空间太小编译生成out文件时,是不会报错的。TI ccs3.3中Stack Size是0x400(即默认的配置),Heap Size是0x200(即默认配置)。如果程序出现莫名的跑飞情况可以试试改改这两个参数值。
2、数组溢出
数组溢出就是定义数组的空间大小,而通过数组下表访问时,下标超过了数组的边界,这样可能改写其他地址的数据,造成程序跑飞。有可能是使用未初始化的变量作为下标方位数组(这种情况编译器通常会有warning提示);还有可能是通过计算关系计算下标,而在异常的情况下下标会越界(应用下标前对下标的范围进行判定,正常后再使用)。
3、访问指向空地址的指针
访问未初始化的空指针也可能出现DSP跑飞的情况;或者将指针作为函数参数传递时,指针未指向具体的地址,而在函数中使用,可能出现死机的情况(也可能不会,在ccs3.3下)。这些“指针未初始化”或“指针未指向具体变量”的问题编译器不会提示错误,最多提示警告。
而“指针未指向具体变量”作为函数参数传递,在VC2005中,编译时不会报错,但有警告,但是在debug状态下运行时直接就跑死了,也算是暴露问题了。
4、未声明的函数调用跑飞
在TI ccs3.3中一些函数没有显式声明,而直接调用可能达不到函数预期的效果或者就是跑飞。以前写过一个CCS环境下因printf函数跑飞的问题。其实未声明函数调用,在zynq的开发平台vivado的SDK中也出现过,编译不报错,运行就是达不到预期的效果。
前面对DSP程序死机的硬件原因进行列举,并给出相应的解决办法,今天将DSP程序死机(跑飞)的软件原因列举一下。
软件死机主要原因是1、堆栈溢出;2、数组溢出;3、访问指向空地址的指针;4、未声明的函数调用跑飞。
1、堆栈溢出
以TI CCS3.3为例,程序运行的堆与栈的空间大小都是由软件设计师自己定义分配大小的。一般出现问题就是为DSP软件运行设置的堆或栈的空间太小,而导致程序不能正常运行。堆或栈空间太小编译生成out文件时,是不会报错的。TI ccs3.3中Stack Size是0x400(即默认的配置),Heap Size是0x200(即默认配置)。如果程序出现莫名的跑飞情况可以试试改改这两个参数值。
2、数组溢出
数组溢出就是定义数组的空间大小,而通过数组下表访问时,下标超过了数组的边界,这样可能改写其他地址的数据,造成程序跑飞。有可能是使用未初始化的变量作为下标方位数组(这种情况编译器通常会有warning提示);还有可能是通过计算关系计算下标,而在异常的情况下下标会越界(应用下标前对下标的范围进行判定,正常后再使用)。
3、访问指向空地址的指针
访问未初始化的空指针也可能出现DSP跑飞的情况;或者将指针作为函数参数传递时,指针未指向具体的地址,而在函数中使用,可能出现死机的情况(也可能不会,在ccs3.3下)。这些“指针未初始化”或“指针未指向具体变量”的问题编译器不会提示错误,最多提示警告。
而“指针未指向具体变量”作为函数参数传递,在VC2005中,编译时不会报错,但有警告,但是在debug状态下运行时直接就跑死了,也算是暴露问题了。
4、未声明的函数调用跑飞
在TI ccs3.3中一些函数没有显式声明,而直接调用可能达不到函数预期的效果或者就是跑飞。以前写过一个CCS环境下因printf函数跑飞的问题。其实未声明函数调用,在zynq的开发平台vivado的SDK中也出现过,编译不报错,运行就是达不到预期的效果。
相关文章推荐
- DSP程序死机(跑飞)的一些情况-硬件原因
- 关于TI DSP 的软件编程的一些库介绍
- 安卓在xml文件(布局文件)中做一些细微改变却运行程序报错的原因
- 安卓在xml文件(布局文件)中做一些细微改变却运行程序报错的原因
- 单片机程序死机原因查找方法
- 为解决易语言程序被杀毒软件误报而进行的一些不成熟的研究
- 为解决易语言程序被杀毒软件误报而进行的一些不成熟的研究
- DSP/BIOS 的程序运行情况
- 分析我的OV3640 打开软件立即导致PDA死机的原因
- DSP28335—程序从flash复制到ram里的两种情况:部分复制和全部复制
- 查杀黑客的隐藏程序一些高级工具软件
- Tomcat 程序无问题的情况下页面打开变慢的原因
- 练习1-22 编写一个程序,把较长的输入行折成短一些的两行或者多行,折行的位置在输入行的第N列之前的最后一个非空格之后。要保持程序能够智能地处理输入行很长以及在制定的列前没有空格或者制表符时的情况。
- 关于TI DSP 的软件编程的一些库介绍
- FileSystemWatcher是软件程序开发常用到的一个监控组件,但是这个控件的Changed 时间方法老是触发2次或者多次,触发多次的情况
- 7.1 :OutOfMemoryError,Java堆溢出了,这表明程序有严重的问题。我们需要找造成OutOfMemoryError原因。一般有两种情况:
- Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件
- DSP28335—程序从flash复制到ram里的两种情况:部分复制和全部复制
- 手机死机的一些原因
- Java程序导致服务死机的情况