DSP

数组溢出与指针问题

2019-07-13 18:20发布

错误一: 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。 就是这三个问题,这个周末就花费了。收获就是,不要怕,遇到问题就鼓起勇气去解决,总是可以解决的,大不了就是花点时间。 总结: 数组访问越限; 指针指错地方; 局部变量过多导致堆栈溢出