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