|
最近在使用多重ADC+DMA时出现了一个奇怪的BUG,ADC和DMA采集的数据很正常,是我想要的波形,但是一旦把DMA的缓存数据copy到另外数组的时候,就出错,具体如下:用串口来把ADC采样得到的数据发送出来,当串口收到任意东西时,就开启发送,其中adcx是储存AD转换数据的数组,也是DMA的内存目标,串口代码如下: void USART1_IRQHandler(void) { u8 Res; u16 i; u16 j; float a[512]; volatile float temp; extern volatile u16 adcx[256][6]; #if SYSTEM_SUPPORT_OS OSIntEnter(); #endif if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)) { for(j=0;j<256;j++) { printf("%d\r\n",adcx[j][0]); } TIM_Cmd(TIM2,ENABLE); Res= USART_ReceiveData(USART1); } #if SYSTEM_SUPPORT_OS OSIntExit(); #endif } 到这里一切正常,输出出来的就是我想要的ad数据,但是因为我要把adcx的部分数据提取出来做FFT,所以需要复制部分数据到另外的数组float a[512],所以又加了端代码在for的下边 先将adcx储存的u16数据转化成float,然后打印出来看是否正确,然后把数据转移到数组a,具体代码如下: for(j=0;j<256;j++) { temp=(float)(adcx[j][0]); printf("%d::%f\r\n",j,temp); a[j]=temp ; } 结果串口出来了乱码,不是我期望的数据 我以为是从u16到float的转换出现了错误,我就把a[j]=temp ;这一句注释掉,相当于代码如下 for(j=0;j<256;j++) { temp=(float)(adcx[j][0]); printf("%d::%f\r\n",j,temp); //a[j]=temp ; } 出来的结果就正常,依旧是正弦波,打印出来的也正常,打印出了完整的256个点 所以相当于是这样子的,AD采样没问题,DMA也没问题,数据也正常,数据类型转化也没问题,但是一旦把数据从adcx转移到另外的数组,就出现了错误,为什么?折腾一天了,跪求大神解答 |
微信公众号
手机版
你可以将堆栈配置加大点,或者将现有局部变量定义为全局变量。
评分
查看全部评分
评分
查看全部评分