数组溢出与指针问题

来源:互联网 发布:ecshop大京东2.5源码 编辑:程序博客网 时间:2024/05/01 17:54

错误一:

Error connecting to the target:

Error 0x00000220/-1156
Error during: Execution, OCS, 
Lost processor clock. Device may be operating
in a low-power mode.  Do you want to bring it

out of this mode?

错误二:

ILLEGAL_ISR() 


需要对三相采集量进行alfa/beta变换,然后FFT处理。做的过程,发现始终显示丢失时钟,查了很久发现时数组访问越限了,在从384个点下采样到256个点的时候,逻辑有点不清楚,导致数组访问溢出。

数组溢出问题一定要特别留意,尤其是边界的条件的时候;

另外,显示堆栈溢出stack overflow,然后进行ILLEGAL_ISR(),根据网上建议,首先要定位从哪个地方进入了非法中断,一运行就跑飞,就是去了非法中断里面的死循环。通过设置断点,找到了中断入口是FFT,然后从网上提示,堆栈溢出,可能是局部变量过多,自己在FFT过程使用了两个中间变量数组,改成全局变量之后就解决了。推测原理是——FFT在主函数里面做,一旦中断来了,就必须保护中断现场,全部压入堆栈,由于局部数组过多,导致了堆栈溢出。

还有一个问题,很隐蔽就是,自己使用了两个数组来循环采样一个信号,通过与一个指针来指向不同的数组。在采样完成的时候,交换指针,由于逻辑不清,在交换指针的时候,之前已经将指针换了一次了,再换一次就导致了每次都是讲一个数组拿去一边采样覆盖,一边做FFT,本意是一个用来采样,另一个用来做FFT。

就是这三个问题,这个周末就花费了。收获就是,不要怕,遇到问题就鼓起勇气去解决,总是可以解决的,大不了就是花点时间。

总结:

数组访问越限;

指针指错地方;

局部变量过多导致堆栈溢出 

0 0
原创粉丝点击